Hatena::ブログ(Diary)

cooldaemonの備忘録 RSSフィード

2007-05-11

snippetsEmu.vim の簡単な使い方

snippet_emu.txt を読んだので自分用の備忘録

人様が見る事を考えてないです。ごめんなさい。

基本の前に・・・

snippetsEmu.vim をロードすると、編集モードの時に <TAB> を押した場合 <{}> にカーソルが飛ぶ。

適当にファイルを開いて、<{}> を入力して、遠くは離れた行まで移動して、コマンドモードで、i<TAB> と押すと挙動が確認できる。

<{}> を幾つも入力して <TAB> を押しまくると、ファイルの先頭にある <{}> から順にカーソルが移動して行く。

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

:Snippet hoge HOGE <{}> HOGE

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

:Iabbr hoge HOGE <{}> HOGE

でもいける。


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

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

編集モードから hoge<TAB> と入力すると、一つ目の fuga が選択された状態になる。

ここで、aaa とか入力して <TAB> を押すと、二つ目の fuga も aaa に置換される。

一つ目の fuga が選択された状態で、何も入力せずに <TAB> を押すと、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<TAB> って入力した後に '%s %s %s %s' とか入力すると挙動が確認できる。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

トラックバック - http://d.hatena.ne.jp/cooldaemon/20070511/1178880282