📝

Neovimを使ったノートの取り方、nvim-orgmodeとoil.nvimの話

2024/04/23に公開

はじめに

ノートの取り方についてなかなかやり方が決まらずにいて、いろいろと試してきましたが最近になって概ね固まってきました。これまではnvim-orgmodeで日々のタスク管理と時間の記録を、Neorgで日報やドキュメントなどを管理していました。
最近Neorgのv8.0.0で破壊的な変更が入ったこともあり[1]、それのキャッチアップをするか、nvim-orgmodeに一本化するか悩んでいました。その結果として、nvim-orgmodeに一本化して運用していくことに決めました。

この記事では、nvim-orgmodeを使ってどのようにノートを取っているのか、一本化したことで見つかったお悩み(oil.nvimまわり)について書いていきます。

ノートの取り方

まずはnvim-orgmodeをどのように使っているのかについて書いていきます。
nvim-orgmode自体がどのようなものなのかについては、リポジトリを参照ください。

ディレクトリ構成

まずはディレクトリ構成について、現在の環境はこんな感じです。

~/notes/org/
├── agenda
│   ├── inbox.org
│   ├── project-a.org
│   └── project-b.org
├── archive
│   └── inbox.org_archive
├── documents
├── inbox.org
├── index
├── journal
│   └── 2024-04.org
├── journal.org
└── notes

それぞれについて説明していきます。

agenda

タスク管理では、agendaの下にプロジェクトなどの分けたい単位でorgファイルを作成して管理します。とりあえずタスクを入れる場所としてinbox.orgも置いてあります。とりあえず入れられる場所があると迷わなくて良いかなと思い作成しています。

inbox

indexには、ファイルの場所、Web記事などを記載します。記載する際には、Telescope.nvimを使って検索しやすい名前やタグを意識して記録します。このようにファイルやリンクを記録することで、nvim-orgmodeの<Leader>ooを使用してファイルや記事を開けるようになります。ただ、ここにはお悩みポイントがありまして、それについては後述します。

archive

archiveagendaでアーカイブしたタスクが保存される場所です。

journal

journalは日報の過去ログ。最新のものはjournal.orgに記載します。journalディレクトリ内で全て管理しても良かったんですが、この中から最新の日付のものを探すのは面倒かなーと思い、とりあえずこのファイル開いて最後までスクロールすればOKという形にしました。

documents

documentsは人に見せることを目的として記載したものを保存するディレクトリです。共有する際にはOenNoteなどのサービスを利用したいと考えています。が、いまのところまだ使ってないです。
共有する前提なのでMarkdownにエクスポートする仕組みがあると良いなーと思いましたが、いったんは考えないものとして必要に応じてフォーマットを修正する運用にしようと思います。これでクリティカルに困ることがあれば何か手を考えようかなと思います。

notes

notesjournaldocumentsの中間的な位置付けです。人に見せるほどまとまってないけど、ある程度まとまった内容を記載するのであればここに保存します。都度documentsに移動していく形です。

日々の運用

運用については、ディレクトリ構成の紹介で概ね想像できる内容かとは思います。journalで日々の記録、notesにドラフト版のドキュメントを作成、documentsに清書、indexに必要なリンクを残し、agendaでタスク管理とそれらの時間記録をつけています。

長らく悩んでいたところがスッキリする構成を構築できたかなと思うので、しばらくこれでノートを取っていこうと思います。

細かい設定内容については私のdotfilesに格納してありますので参考にしていただけたらと思います。

https://github.com/siteyo/dotfiles/blob/main/config/nvim/lua/config/plugins/orgmode.lua

nvim-orgmodeとoil.nvimについて

ここからは設定していく上で動作的に気になった箇所があるのでメモ書きとして残しておきます。

nvim-orgmodeではハイパーリンクをサポートしており、<Leader>ooでURLもしくはパスで指定されたファイルを開けます。このとき、nvim-orgmodeではnetrwの機能を用いてファイルのオープンを実行しているようです。

https://github.com/nvim-orgmode/orgmode/blob/master/lua/orgmode/org/mappings.lua#L871-L874

一方でoil.nvimでは、デフォルトでnetrwを無効にする挙動をしています。
https://github.com/stevearc/oil.nvim/blob/master/lua/oil/config.lua#L3-L4
https://github.com/stevearc/oil.nvim/blob/master/lua/oil/init.lua#L1040-L1042

このため、これらが競合するとnvim-orgmodeにてハイパーリンクを開けない状態になります。

以前にNeorgを使用していたときは、norgファイルに記載されたハイパーリンクを特段の設定なく開けていたので、Neorgではどのようにファイルを開いているのか確認しました。
https://github.com/nvim-neorg/neorg/blob/main/lua/neorg/modules/core/esupports/hop/module.lua#L90-L113
どうやらOSごとに開くためのコマンドを呼び分けているようです。

ついでにoil.nvimにて、ファイルを外部コマンドで開く処理を確認しましたが、こちらも同じくOSごとにコマンドを呼び分けているようです。
https://github.com/stevearc/oil.nvim/blob/master/lua/oil/actions.lua#L178-L194

ということで調べた感じでは、nvim-orgmodeがnetrwを介してファイルを開くのでなく、OSごとにコマンドを呼び分けるつくりであれば競合することなく動作しそうだなーという感じでした。nvim-orgmodeのコミットログを遡ってみましたが、もとからOSで呼び分けることは考えずにnetrwを一貫して使用しているようです。

いったんはoil.nvimでnetrwを無効にしないように設定すれば期待通りに動作するので、今回はその方向でコンフィグを修正としました。(nvim .でoil.nvimを開きたい需要も今のところないので)

おわりに

ということで、nvim-orgmodeを使用した自分なりのノートの取り方について記事を書きました。

余談ですが、このように記事を書くのは今回がはじめてなので少しドキドキです。今後もなにかしら記事を更新していけたらなと思っています。

脚注
  1. https://vhyrro.github.io/posts/neorg-and-luarocks/ ↩︎

Discussion