この記事は Vim 駅伝 2024/5/20 の記事です。
前回は staticWagomU さんの Masonから脱却できなかった - 輪ごむの空き箱という記事でした。
次回は kuuote さんの HとLをいい感じにするマッピングをvimrc読書会で見つけたので魔改造してみたという記事です。
これは何?
Markdown は実質、単なるテキストファイルです。そのため Neovim で書くこと自体は簡単なんですが、ビューアが無いのはターミナルで動くものである以上仕方ありません。今までもこの問題を解決するために様々なプラグインが作られてきました。
検索するとまだまだ出て来ます。大抵のものが、裏で HTTP サーバを立てておいて、ターミナル(Neovim)の横にブラウザを開いて使う、という形式です。今回紹介するのはこれらとはちょっと違い、Obsidian をビューアとして使うという提案です。
こんな感じです。プレビューできてますね。
Obsidian とは……というのはここには書かないことにします。検索すればいくらでも出て来ますからね。最近流行のメモアプリという認識で OK です。
Obsidian を Neovim で書く
Obsidian の一番の特長とは、管理する文書自体はフォルダに入れられた Markdown ファイルでしかない、ということです。このために、公式の Obsidian アプリでなくても好きなエディタで文書を開いて編集できるのです。
Neovim の場合も同じ。例えば以下のようにしてファイルを開けます。
$ nvim ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/Foo/2024-05-13.md
これで Foo
という保管庫に入った 2024/5/13 の日記を開けます。
ファイルパスは macOS での例です。以下でも同じようなパスが出て来ますので、その他の OS では読み替えてください。
しかし Neovim ですからね。当然テキスト表示です。Tree-sitter などで見た目はある程度リッチにできますが、画像は表示できませんしドラッグ & ドロップで追加することもできません。
obsidian-bridge.nvim
これを解決するために oflisback/obsidian-bridge.nvim を使います。このプラグインにより Neovim を Obsidian の公式アプリと協調して動かすことができます。
- Neovim で開いた文書を自動的に Obsidian アプリで開く。
- Neovim で編集中にスクロールすると該当の場所に自動的に追随する。
プラグインが提供する機能は主に上記の 2 つです。これにより、Obsidian アプリと Neovim を行ったり来たりして編集することが可能になります。普段は Neovim で内容を編集しながら、画像を挿入したいと思ったら Obsidian アプリにドラッグ & ドロップすればいいのです。Neovim に戻った時にそれも反映されています。
プラグインのインストール
Obsidian アプリの制限モードをオフにする
すでにコミュニティプラグインを使っている人はここをスキップしてください。
obsidian-bridge.nvim を使うためには、Obsidian アプリにもプラグインを入れる必要があります。インストールした状態では、Obsidian アプリには任意のコミュニティプラグインをインストールすることができません。設定→コミュニティプラグイン→制限モードからオフにしましょう。
Local REST API for Obsidian のインストール
このプラグインは名前の通り、Obsidian アプリを操作できる REST API を提供します。obsidian-bridge.nvim は内部で curl
を使い、この REST API を叩いて Obsidian アプリを操作しているのです。
通常なら Obsidian アプリの設定 UI からプラグインをインストールする所なのですが、2024/5 現在、obsidian-bridge.nvim に必要な機能を利用するには開発中の fork を使う必要があります。これは Beta 版という扱いですので簡単にインストールできません。ここで利用するのが BRAT という別のプラグインです。
この記事の初版では fork したレポジトリーからコンパイルしてプラグインをインストールしていました。その後 obsidian-bridge.nvim の README が下記の BRAT を使う方法に書き換えられ、併せて本記事も修正しています。
BRAT のインストール
これも、すでに BRAT をインストール済みの人はスキップしてください。
設定→コミュニティプラグイン→閲覧から BRAT をインストールしましょう。
“インストール” をクリックすると完了です。
設定→コミュニティプラグインから、“BRAT” を有効にしておきます。
BRAT によるインストール
設定画面左メニューの下部から BRAT の設定画面が開けるようになります。ここで、“Add Beta plugin with frozen version” を選択し、
以下のように入力して “Add Plugin” をクリックしてください。
- URL → https://github.com/oflisback/obsidian-local-rest-api
- リリースタグ → v1.0.0
暫く待つとインストール完了です。設定画面で BRAT と同じ並びに “Local REST API with Scroll” が現れているはずです。
アプリで有効にする
設定→コミュニティプラグインから、“Local REST API with Scroll” を有効にします。
歯車アイコンを押してプラグインの設定を開き、“Your API Key” をメモっておきます。更に、“Enable Non-encrypted (HTTP) Server” を ON にします。
Local REST API プラグイン自体は HTTPS でのアクセスにも対応しているのですが、2024/5 現在、obsidian-bridge.nvim は HTTP でのアクセスにしか対応していません。
環境変数に API Key をセットする
先ほどメモっておいた文字列を環境変数 OBSIDIAN_REST_API_KEY
にセットします。Neovim を起動する時は必ずこの環境変数が有効になるようにしておきましょう。
export OBSIDIAN_REST_API_KEY=hogehoge
誤った設定で REST API サーバを公開した場合、この API Key で全ての文書にアクセスできてしまいます。この文字列は注意して扱いましょう。
obsidian-bridge.nvim のインストール
次に、Neovim に obsidian-bridge.nvim をインストールします。以下ではプラグインマネージャーとして lazy.nvim を使っているものとして進めます。
{ "oflisback/obsidian-bridge.nvim", opts = { scroll_sync = true } }
obsidian_server_address
というオプションを指定すれば、別のマシンで起動している Obsidian アプリに接続することもできます。ですが HTTP でアクセスするのは危険ですので、標準の http://localhost:27123
から変更しない方が良いでしょう(ポート番号は変更してもいいかもですね)。
これで終わりです。後は、Neovim を再起動した上で Obsidian 上の文書を開いてみましょう。Obsidian アプリでも同じ文書が開くはずです。Neovim をスクロールすると Obsidian アプリもスクロールします。Neovim、Obsidian アプリ、双方で編集したものが、もう片方のアプリにフォーカスが移ると互いに同期されるはずです。
ただし他のソリューションと違い、Neovim 上の修正は :w
で保存しないと反映されません。これは善し悪しですね。
更に便利に使うには
Markdown を、あるいは、Obsidian の文書を Neovim で書くにはまだまだ様々なテクニックがあります。この記事はここまでとしますが、他にも便利になるプラグインは色々ありますのでそれらを簡単に紹介して終わりましょう。
Markdown を更に見易くする
nvim-treesitter/nvim-treesitter
これはもう入れてますよね。
MeanderingProgrammer/markdown.nvim
通称 “render-markdown”。Tree-sitter を組み合わせると見た目がかなりリッチになります。
TS のみ | TS + se cole=2
|
render-markdown |
---|---|---|
- TS のみ
- Tree-sitter を入れて
set conceallevel=0
だとこの表示です。色がリッチになります。 - TS +
se cole=2
- レベル 1 に加えて、
set conceallevel=2
するとこの表示です。チェックボックスが見易くなったかな? - render-markdown
- 更に render-markdown を入れました。表や引用マークが変わってますね。
Obsidian を便利に使う
epwalsh/obsidian.nvim
Obsidian 特有の記法(文書間のリンクなど)がきちんとハイライトされるようになったり、hrsh7th/nvim-cmp(自動補完)や nvim-telescope/telescope.nvim(ファジーファインダー)を使ってより素早く文書を読んだり書いたりできます。
このプラグインにより、リンクを書く時補完も効きます。
delphinus/obsidian-kensaku.nvim
Obsidian 文書の全文検索をローマ字で行うプラグインです。lambdalisue/vim-kensaku を利用しています。
ツリー形式で開けるファイラー
Obsidian アプリの左側にあるファイラーが、Neovim にもあると便利ですね。これも星の数ほどあるので好きなやつを選びましょう。
僕は 2 画面ファイラーとして使える、vfiler が好きですね。
終わりに
以上です。いいですよ。Neovim と Obsidian。