UltiSnipsでスニペットを登録してVimを効率化

スニペットとは

これを読んでいる時点でスニペットが何かを理解している人が殆どだとは思いますが一応説明します。プログラミングをしているとよく書く記述というものがあるのですが、そういった繰り返し書くコードの冒頭部分を入力した時点でサジェストさせるものです。

今回紹介するUltiSnipsというVimプラグインではかなり自由に、そして簡単に独自のスニペットを作ることが出来ます。まだスニペットを使っていない方は是非インストールした方が良いです。

まずはUltiSnipsをインストールします。Vimプラグインのインストール方法はこちらをご確認下さい。UltiSnipsのインストールが終わったら.vimrcに下記を記述して下さい。

UltiSnipsを使う準備

let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<c-n>"
let g:UltiSnipsJumpBackwardTrigger="<c-p>"
  • <Tab>で登録したスニペットを参照
  • <Ctrl-n>で次候補を選択
  • <Ctrl-p>で前候補を選択

UltiSnipsでスニペットを登録

all.snippets

まずは全てのファイルから参照するスニペットを登録します。試しにアノテーションコメントのスニペットを登録してみます。下記の様な~/.vim/UltiSnips/all.snippetsを作成して下さい。

snippet '# T' "todo annotation comment <Ctrl-l>"
# TODO: $1
endsnippet

これで登録完了です。新しいバッファを開いて# Tと入力した後に<Tab>を押すと# TODO: が入力され直後の位置にカーソルが移動します。

rails.snippets

次に.rbファイルを開いて:UltiSnipsEditとExコマンドを実行して下さい。~/.vim/UltiSnips/ruby.snippetsが開かれます。ここに記述したスニペットは.rbファイルでのみ参照されるスニペットになります。

下記は私の下手くそなスニペット例です。

snippet 'class' "create basic class <Ctrl-l>"
class ${1}
end
endsnippet

coc.nvimと連携

以前coc.nvimプラグインによる自動補完や、Ruby/Vue.jsのLSP設定についてまとめました。UltiSnipsの候補をcoc.nvimと連携させることも可能です。連携させるには:CocInstall coc-snippetsというExコマンドを実行して下さい。

特にキーマッピングが難しいのですが、下記は取り敢えず<Tab>/<Shift-Tab><Ctrl-n>/<Ctrl-p>でcoc.nvimの候補を切り替え・入力が出来て、<Ctrl-l>でスニペットの展開が出来る様になる.vimrcです。

""" for coc.nvim
let g:UltiSnipsExpandTrigger="<Nop>"
let g:UltiSnipsJumpForwardTrigger="<C-n>"
let g:UltiSnipsJumpBackwardTrigger="<C-p>"
let g:coc_snippet_next = '<C-n>'
let g:coc_snippet_prev = '<C-p>'

"" coc.nvim
imap <C-l> <Plug>(coc-snippets-expand)
function! s:check_back_space() abort
  let col = col('.') - 1
  return !col || getline('.')[col - 1]  =~ '\s'
endfunction
inoremap <silent><expr> <Tab>
      \ pumvisible() ? "\<C-n>" :
      \ <SID>check_back_space() ? "\<Tab>" :
      \ coc#refresh()
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"

以上です。

終わりに

coc.nvimとの連携によるキーマッピングの設定が若干ややこしいものの、独自スニペット定義という機能については使い勝手の良さそうなVimプラグインかと思います。「そう言えば、これ何回も手打ちしてるなー」という瞬間があればどんどんスニペットに追加していくのがおすすめです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA