snippetsEmu.vim の簡単な使い方

snippet_emu.txt を読んだので自分用の備忘録
人様が見る事を考えてないです。ごめんなさい。

基本の前に・・・

snippetsEmu.vim をロードすると、編集モードの時に を押した場合 <{}> にカーソルが飛ぶ。
適当にファイルを開いて、<{}> を入力して、遠くは離れた行まで移動して、コマンドモードで、i と押すと挙動が確認できる。<{}> を幾つも入力して を押しまくると、ファイルの先頭にある <{}> から順にカーソルが移動して行く。

基本 Snippet でトリガーを登録する

:Snippet hoge HOGE <{}> HOGE

編集モードから hoge と入力すると、HOGE [カーソル] HOGE になる。

:Iabbr hoge HOGE <{}> HOGE

でもいける。

タグ名を付けると、同名のタグを置換してくれる

:Snippet hoge HOGE <{fuga}> HOGE <{fuga}>

編集モードから hoge と入力すると、一つ目の fuga が選択された状態になる。
ここで、aaa とか入力して を押すと、二つ目の fuga も aaa に置換される。
一つ目の fuga が選択された状態で、何も入力せずに を押すと、fuga のままになるので、デフォルト値としても使える?

タグを引数に関数を実行する

:Snippet hoge Hoge <{fuga}> Hoge. HOGE <{fuga:substitute(@z,'.','\u&','g')}>! HOGE

一つ目の fuga で入力した内容が、@z レジスタに入るので、@z を substitute の第一引数として渡す。
mmmmm とか入力すると、Hoge mmmmm Hoge. HOGE MMMMM HOGE となる。

下記でも動く。

:Snippet hoge HOGE <{fuga:substitute(@z,'.','\u&','g')}>! HOGE

関数を実行する

:Snippet hoge HOGE ``strftime("%Y/%m/%d")`` HOGE

HOGE 2007/05/11 HOGE となる。

ユーザ定義関数で <{}> を返すと・・・

    function! Count(haystack, needle)
        let counter = 0
        let index = match(a:haystack, a:needle)
        while index > -1
            let counter = counter + 1
            let index = match(a:haystack, a:needle, index+1)
        endwhile
        return counter
    endfunction

    function! PyArgList(count)
        if a:count == 0
            return "(,)"
        else
            return '('.repeat('<{}>, ', a:count).')'
        endif
    endfunction

    Snippet pf print "<{s}>" % <{s:PyArgList(Count(@z, '%[^%]'))}><CR><{}>

面倒なので、詳しい説明は書かないが % の数を数えて個数分 <{}> を出力してくれる。
xxxx.py とか開いて pf って入力した後に '%s %s %s %s' とか入力すると挙動が確認できる。