vim-vsnip
概要
https://github.com/hrsh7th/vim-vsnip
vim-vsnipはVim/Neovimのスニペットプラグインです。
特徴
LSPまたはVSCodeと同様のフォーマットでスニペットを定義します。
vim-vsnip-integと併用することで様々なプラグインと連携できます。(例: asyncomplete.vim, ddc.vim, vim-lspなど)
VimScriptのみで実装されています。
インストール
dein.vim
code:toml
plugins
repo = 'hrsh7th/vim-vsnip'
plugins
repo = 'hrsh7th/vim-vsnip-integ'
スニペットを定義する
VsnipOpenコマンドを実行すると、編集中のファイルのファイルタイプに応じたスニペットファイルを編集できます。
vim-vsnipでは、スニペットファイルをLSPまたはVSCodeと同様のフォーマットで記述します。
スニペットファイルの保存場所
g:vsnip_snippet_dirで指定されたディレクトリに保存されます(デフォルトは~/.vsnip)
スニペットの展開
<Plug>(vsnip-expand)で展開できます。
例えば、vimrcやinit.vimで以下のように設定しておくと、C-jでスニペットが展開できるようになります。
code:vim
imap <expr> <C-j> vsnip#expandable() ? "<Plug>(vsnip-expand)" : "<C-j>"
スニペットファイルの記述例
Ruby
code:ruby.json
{
"Class": {
"prefix": "class",
"body": [
"class $0",
"end"
]
},
"Module": {
"prefix": "module",
"body": [
"module $0",
"end"
]
},
"Method": {
"prefix": "def",
"body": [
"def $0()",
"end"
]
}
}
例えば、.rbファイルの編集中にclassと入力した状態で<Plug>(vsnip-expand)を実行すると、下記のように展開されます(■はスニペット展開後のカーソルの位置を表しています)
code:ruby
class ■
end