neosnippet.vim を活用しよう
この記事は Vim Advent Calendar 2012 320日目の記事になります。
さて、今回は neosnippet.vim の便利そげな使い方でも簡単に書いてみます。
[neosnippet.vim とは]
neosnippet.vim とは Shougo 氏が作成されたスニペット補完を行うためのプラグインです。
予め設定しておいた定型文を簡単に挿入する事ができます。
NeoBundle 'Shougo/neosnippet'
また、単体でも使用する事は可能ですが、neocomplete.vim または neocomplcache と併用して使用するとよいでしょう。
NeoBundle 'Shougo/neocomplete.vim'
[スニペットを定義する]
neosnippet.vim で使用できるスニペットはユーザ側で定義する事ができます。
スニペットファイルは filetype ごとに設定でき、
NeoSnippetEdit
で、現在の filetype のスニペットファイルを編集する事ができます。
例えば、Vim script の if 文は
snippet if abbr if endif if ${1:condition} ${0} endif
のような記述で定義する事ができます。
詳しくは、
:help neosnippet-snippet-syntax
を参照して下さい。
[Vim script の式を埋め込む]
neosnippet.vim のスニペットでは `` で囲った文字列は Vim script の式として評価されます。
例えば、次のような定義をすると
snippet test `join(range(10), ', ')`
と、いうように展開されます。
これは様々なことに利用する事ができます。
[現在開いているファイル名を展開する]
現在開いているファイル名などを展開することもできます。
snippet filename alias fname `expand("%")` snippet ffilename alias ffname `substitute(expand("%:p"), '\', '/', "g")`
ファイル名などをサッと挿入したい場合に便利ですね。
[関数名を展開する]
他のプラグインと組み合わせると更に強力です。
例えば、current-func-info.vim を使用すればカーソル位置内の関数名を挿入する事もできます。
snippet funcname `cfi#get_func_name()`
[plugin のテンプレートを定義]
上記の応用です。
Vim のプラグインで plugin にスクリプトファイルを記述する場合、たいていは次のような定型文を埋め込みます。
" 文字コードを設定したり、g:loaded を仕込んだり etc... scriptencoding utf-8 if exists('g:loaded_marching') finish endif let g:loaded_marching = 1 let s:save_cpo = &cpo set cpo&vim " ... let &cpo = s:save_cpo unlet s:save_cpo
これを毎回書くのはしんどいので neosnippet.vim で定義しておくとよいです。
snippet plugin abbr plugin scriptencoding utf-8 if exists('g:loaded_`expand("%:t:r")`') finish endif let g:loaded_`expand("%:t:r")` = 1 let s:save_cpo = &cpo set cpo&vim ${0} let &cpo = s:save_cpo unlet s:save_cpo
g:loaded の変数名をファイル名で定義するんですが、`` を使用して動的に設定するようにしています。
既に neosnippet.vim でも組み込まれていますが、autoload 関数や C言語,C++ のインクルードガードのように現在のファイルパスに依存するような定型文を記述する場合に大変有効です。
と、いう事で neosnippet.vim の設定を幾つか紹介してみました。
Vim script の式が埋め込めるのはだいぶ便利なのでどんどん使ってみるとよいです。