今時の Vimmer ならみんな使っている neocomplcache にはスニペット補完という便利な機能があります。スニペット補完を使えば、あらかじめ登録しておいたコードのひな形を挿入することで実際のコーディング量を減らすことができます。
今回は neocomplcache におけるスニペット補完機能の導入とスニペットの設定方法を紹介します。
neocomplcache の導入については数々のエントリが存在しますのでそちらを参照してください。
まずはスニペット補完のトリガーをマッピングしましょう.以下の設定を .vimrc に追加してください。
" <C-k> にマッピング imap <C-k> <Plug>(neocomplcache_snippets_expand) smap <C-k> <Plug>(neocomplcache_snippets_expand)
これでスニペット補完が利用可能になりました。ためしに適当な Obj-C のファイルを開いて、array を入力し <C-k> をタイプしてみてください。以下のコード片が挿入されたら正しく設定されています。
NSMutableArray *array = [NSMutableArray array];
このように neocomplcache のスニペット補完は設定されたキー文字列をを入力し、トリガーをタイプすることで利用します。
スニペットを編集するには以下のコマンドを使います。
:NeoComplCacheEditSnippets
このコマンドは頻繁に活用するので私は以下のようにマッピングしています。
noremap es :<C-u>NeoComplCacheEditSnippets<CR>
コマンド名は “edit snippets” の頭文字からとっています。
最後にスニペットを追加してみましょう。今回は dealloc などによく記述する、
[obj release]; obj = nil;
のようなコード片のスニペットを追加したいと思います。
:NeoComplCacheEditSnippets をタイプして以下を追加してください。
snippet rel abbr [obj release]; obj = nil; [${1} release]; $1 = nil;
snippet は補完のキー文字列、abbr は補完のポップアップメニューに表示される文字列です。インデント以下がスニペットの本体になります。<Plug>(neocomplcache_snippets_expand) を入力すると x の順にプレースホルダをジャンプします。${x:default_word} のように設定しておくとデフォルトで挿入される文字列を指定することもできます。また、$x はジャンプしたときに対応する ${x} に同期されます。
したがって、今追加したスニペットは “rel<C-k>myObject<C-k>” と入力すると
[myObject release]; myObject = nil;
のようになります。例のごとくよくわからないと思いますので、ぜひ実際に試して挙動を確認してみてください。
iOS のコードを書いていると定型的なコード片を頻繁に書くと思います。そういうときにスニペットを用意しておくと本当に便利です。日頃から良く書くコードの固まりを意識してがんがんスニペットを追加しましょう。スニペット補完は、使い始めると思った以上に便利で life changing な機能ですよ。neocomplcache のヘルプには、さらに詳しくスニペット補完について記載されていますので確認してみてください。