私は昔はemacsを使っていて今はvimを使うことが多いのですが、emacsで重宝していた機能の一つに
yasnippetを使ったoneshot-snippetがありました。
これはsnippetの機能を使って使い捨てのsnippetを作成し、さっと使えるようにしたものです。
登録するほどの汎用性はないけど、ファイル編集の際に何回か同じパターンを入力しなきゃならないときが
結構あるので、この関数が好きで大分お世話になりました。
しかし、vimではneosnippetという同じようなスクリプトはあるものの、oneshot snippetのようなものは見つけられなかったので
Vim script勉強して何とか作らなきゃなぁ、と思っていたのですが、今日改めてneosnippetのコードを見ていたらneosnippet_register_oneshot_snippet
という関数を発見したのでメモしておきます。
試したところ、これを使えば使い捨てのsnippetを作れたので、使い方を残しておきます。
使い方
前提: neosnippetは既に使える状態であるとします。
.vimrc
に以下のコードを追記します。(キーバインドは自分の好きなものに変えてください)
vmap <C-u><Plug>(neosnippet_register_oneshot_snippet)
後は、編集ファイル内でsnippetの元を作り、visual modeでsnippetを範囲選択した状態で
ctrl-uを押すことでneosnippet_register_oneshot_snippet
が起動され、使い捨てのsnippetを登録できます。
登録の際にトリガーを聞かれるので、好きなトリガーを登録すれば、そのファイル内でのみ使えるsnippetを起動できるようになります。
例
foo.py
ファイル内で以下のようなsnippetを書きます。
self.${1} = $1
で、visual modeで上の行を選択しctrl-uを押すことでoneshot snippetを登録できます。
登録時に、snippet呼び出しのキーワードを指定します (デフォルトだと"oneshot"。ちょっと長い気がしますが。)。
後はinsert modeでoneshotと入力をしてctrl kなどでsnippetを起動すればいつも通りのsnippetが簡単に使えるようになります!