neovimのテンプレート管理にはmattn/vim-sonictemplateを使ってみよう

vimでテンプレートを使って入力の手間を省いてみようと思い、vim-sonictemplateを試してみました。
2021.11.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

同じフォーマットの文書を編集する時には予めテンプレート化しておくと便利です。vimにおいてもテンプレート機能をもつプラグインは数ありますが、今回は様々な種類別のテンプレートを用意できる mattn/vim-sonictemplate を紹介してみます。

プラグインについて

初期から幾つもの言語用テンプレートが用意されています。また、テンプレート内にシェルコマンドも併用可能で、日付等の都度異なる値を自動入力も可能です。

インストールする

今回はlazy.tomlへの記載で行います。

vim ~/.config/nvim/lazy.toml
[[plugins]]
repo = 'mattn/vim-sonictemplate'

テンプレートを呼び出す

テンプレートは編集中のファイル拡張子に連動しています。例えば markdown 用のテンプレートを開きたい場合には

vim edit.md

のように予めmarkdownファイルを編集している状態にしておく必要があります。指定するファイル名が実際には存在していなくても問題ありません。

また、テンプレート内で特定のコマンドが記載されていると、テンプレートを指定したタイミングで以下のような入力受付が開始されます。

テンプレートを追加する

テンプレート設置先は設定次第ですが、以下はdeinで管理している際の一例となります。

% ls ~/.vim/dein/repos/github.com/mattn/vim-sonictemplate/template/
_        clojure     d       go      java        kotlin      perl        ruby        vim
bzl        cmake       dockerfile  groovy      javascript  latex       perl6       rust        zig
c        cpp     elixer      help        json        make        php     scala
changelog    cs      erlang      html        jsx     markdown    python      typescript

該当言語のディレクトリ内に該当言語の拡張子つきでファイルを追加します。必要に応じて以下のスニペットを使うと便利になります。

用途 記法
テンプレート選択時に入力を強制させる {{_input_:title}}
テンプレート選択後のカーソル初期位置を指定させる {{_cursor_}}
テンプレート内でコマンドを展開させる {{_expr_:}}

あとがき

vimで編集する文書フォーマットは事ある毎に手書きでやっていましたが、他のエディタでやっているようにテンプレート化すればいいのではないかと思い、検索して試してみました。_expr_ 記法でのコマンド指定や、_input_ 記法での入力受付は中々便利なので、毎回手間だと感じていた場合には試してみるのをおすすめします。