dackdive's blog

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

[vim]neosnippetの自作スニペットで現在開いているファイル名を使う

ちょっとしたメモ。
前回の続き。

たとえば、Java において FooController.java みたいなファイルを NERDTree から作成して開き

public class FooController {
}

のように現在のファイル名が挿入されたスニペットを追加したい。

このようなスニペットを実現する方法について、こちらが参考になった。
neosnippet.vim を活用しよう - C++でゲームプログラミング

` ` で囲った文字列は vim script として評価される らしい。

また、vim script において ファイル名を取得するには expand() が使える。
これについては vim

:help expand

と打ち、ヘルプを参考にすると、

{expr} が '%' か '#' か '<' で始まる場合には、展開は
|cmdline-special|のように、変換子を受け付け、それらに関連付け
られた変換が施される。ここに簡単な概略を示す:

    %           現在のファイル名
    #           代替バッファのファイル名
    #n          n番の代替バッファのファイル名
    <cfile>     カーソルの下のファイル名
    <afile>     autocmdのファイル名
    <abuf>      autocmdのバッファ名
    <sfile>     取り込み(source)中のファイル名、関数名
    <slnum>     取り込み(source)中の行番号
    <cword>     カーソル下の単語(word)
    <cWORD>     カーソル下の単語(WORD)
    <client>    最後に受け取ったメッセージの{clientid}
                |server2client()|
変換子:
    :p          フルパス名を展開
    :h          ヘッド(ディレクトリ)
    :t          テイル(ファイル名だけ)
    :r          拡張子が削除される
    :e          拡張子だけ

とあるため、% で現在のファイル名が取得でき、かつ % の後ろに適切な変換子を指定することで拡張子なしのファイル名を取得することができそう。

というわけで、上の例では

snippet class
    public class `expand("%:t:r")` {
    }

としてあげれば良い。