Vimでスニペットを使う。( coc-snippets, ultisnips, vim-snippets)
jiroshin.icon Vimでスニペットを使いたくなったので調べてみた。
coc.nvimでスニペットを扱う方法はいくつかあるようだ。
Coc has snippets support in different ways:
① Snippet completion items from different vim snippet plugins, by use extension like: coc-ultisnips and coc-neosnippet.
② Snippet kind of completion item from language servers, which are snipmate format.
③ Snippet completion items from coc extensions that contribute VSCode snippets.
今回は①の別のVimプラグインを使う方法を選んだ。
ということでセットアップ㊗️️
① SirVer/ultisnipsのインストール
code: dein.yaml
plugins
repo = 'SirVer/ultisnips'
hook_add = '''
let g:UltiSnipsExpandTrigger="<Down>"
'''
デフォルトの変数設定はここに書いてる。
変数 g:UltiSnipsSnippetDirectories
スニペットファイルを置くディレクトリ。デフォルトはg:UltiSnipsSnippetDirectories=["UltiSnips"]。
変数 g:UltiSnipsExpandTrigger
スニペット展開のトリガーとなるキーバインド。デフォルトではタブになっているが、cocの補完選択キーバインドと衝突していて悪さするので<Down>を指定している。
② coc-snippetsのインストール
code: CocInstall
:CocInstall coc-snippets
簡単〜。
③ 試してみる
~/.vim/UltiSnips/に言語ごとのスニペットファイル.snippetsを作る。ファイル名は言語の拡張子を使う。
ここではflutterのStatelful Widgetを作るスニペットを作ってみる。
code: ~/.vim/UltiSnips/dart.snippets
snippet stf "Snippet Stateful Widget" class ${1:ClassName} extends StatefulWidget {
@override
_$1State createState() => _$1State();
}
class _$1State extends State<$1> {
@override
Widget build(BuildContext context) {
return Container();
}
}
endsnippet
ヨシッ!stf というキーワードでスニペットを登録する設定を書いた。
それでは適当なdartファイルを開いて試してみる。
https://gyazo.com/8e640c8a5f4cac5401619bfde3380596
うごいた。
スニペットのソースがまとまった便利なプラグイン
honza/vim-snippetsにはたくさんのスニペットファイルが用意されている。
jiroshin.icon 秘伝のタレみたいなもの。基本的にはhonza/vim-snippetsを使ってオリジナルのスニペットを使いたい時だけSirVer/ultisnipsを使えば良さそう。
オリジナルのスニペット使わない場合、coc-snippetsはUltiSnipsやsnipmateといった異なるスニペットエンジンのスニペットファイルを読む機能を持っているので実際はhonza/vim-snippetsとcoc-snippetsだけで十分だったりする。
参考