dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

[vim]neosnippetに独自スニペットを追加する

メモ。
よく使うコードスニペットを簡単に挿入する機能を提供してくれる vim プラグイン neosnippet
これに、自分でよく使うスニペットを追加する方法。

こちらの記事が参考になりました。


設定方法

.vimrc に以下を記述する。

# これはインストール済み
NeoBundle 'Shougo/neocomplete'
NeoBundle 'Shougo/neosnippet'
NeoBundle 'Shougo/neosnippet-snippets'

" Plugin key-mappings.  " <C-k>でsnippetの展開
imap <C-k> <Plug>(neosnippet_expand_or_jump)
smap <C-k> <Plug>(neosnippet_expand_or_jump)
" 自分用 snippet ファイルの場所 (任意のパス)
let g:neosnippet#snippets_directory = '~/.vim/snippets/'

自作 snippet の配置場所については、
私の場合 .zshrc.vimrc はまとめて ~/dotfiles に置き、そこからシンボリックリンクを貼るようにしている。
(よくある構成です)

そのため、今回も ~/dotfiles 内に snippets というディレクトリを作り、そこから .vim/snippetsシンボリックリンクを貼ることにした。
べつに snippets_directory として直接 ~/dotfiles/snippets/ を指定してもいいと思う。

HOME
├── .vim
│   ├── snippets  # シンボリックリンク
│   └── bundle
│        └── neosnippet-snippets
│            └── neosnippets  # デフォルトで用意されているスニペット
│                ├── java.snip
│                ├── python.snip
│                ├── ...
│
└── dotfiles  # git で管理
    ├── .vimrc
    ├── .zshrc
    └── snippets  # 実体
        └── # 独自スニペットはここに置く

この状態で vim を起動し、スニペットを追加したい拡張子のファイルを開いて

:NeoSnippetEdit

を実行するとスニペット定義ファイルを開くことができるので、自作スニペットを記述する。

ファイルは snippets_directory で定義したディレクトリに保存される。
デフォルトのスニペットが定義されている拡張子の場合もこちらにファイルが作成され、デフォルトと追加したスニペットと両方使える。

スニペットの書式についてはデフォルトで用意されてるものを参考にすると良い。
例として java.snip を開くと

snippet class
    class ${1} ${2:extends} ${3:#:Parent} ${4:implements} ${5:#:Interface} {
        ${0:TARGET}
    }

となっている。

snippet ****** がキーワードになり、vim の insert モード中にキーワードを入力するとスニペットが補完候補に表示される。
実際のスニペットはその1行下からインデントして記述する。

また ${1}, ${2} という変数を埋め込んでおくとスニペット挿入時にその箇所にカーソルがセットされ、Ctrl-k を押すと次の番号の位置に飛ぶ。