Vimのための何か

code-snippet プラグイン

置き場所

構成

plugin/code-snippet.vim
スクリプト
doc/code-snippet.jax
日本語ドキュメント
doc/code-snippet.txt
英語ドキュメント

インストール方法については “doc/code-snippet.jax” を参照してください。

説明

VimでScribesみたいな入力補完ができたらいいな、と思って作ったら、既にsnippetsEmuなるものがありました。でもこっちのが簡潔でいいもんね。

テンプレートの展開はVimの短縮入力機能にたよっています。このプラグインは、文字列式を受け取って “:iabbrev” コマンドに渡すラッパコマンドを用意しているだけです。その他に、前方、後方のプレースホルダに移動するマッピングと、プレースホルダを置き換えるマッピングを用意しています。プレースホルダにはデフォルトの文字列を指定できます。

例示

たとえば、ファイル形式別プラグインのディレクトリに以下のような “c_snippet.vim” を用意します。

" C のためのテンプレート

" simple-snippet.vimが読み込まれていなければ実行しない
if exists(':StringAbbrLocal') != 2
  finish
end

StringAbbrLocal while() "while([~cond~]) {\n[~~]\n}"
StringAbbrLocal fgets() "fgets([~buf~]; [~bufsize~]; [~fp:stdin~])[~~]"

Cファイルを編集中に “while()” と打って Shift-Return を押すと、

int
main(void)
{
    /* ここから下が展開された部分 */
    while([~cond~]) {
        [~~]
    }
    /* 以上 */
    return 0;
}

以上のように展開されて、 “[~cond~]” の部分が選択されます。Return を押すと削除されて挿入モードに入ります。もう一度 Shift-Return を押すと、 “[~~]” の部分が、今度は選択されるのではなく単に削除されて挿入モードに入ります。

次に “fgets()” と打って Shift-Return を押すと、

fgets([~buf~], [~bufsize~], [~fp:stdin~])[~~]

のように展開されて “[~buf~]” が選択されます。もう二度 Shift-Return を押すと “[~fp:stdin~]” が選択されます。ここで Return を押すと、 “stdin” がデフォルトの文字列として挿入されます。デフォルト文字列を消すためには Ctrl-U を押してください (これはVim標準のコマンドです) 。

基本はこれだけです。詳しくは付属のヘルプファイルを参照してください。

更新履歴

2007-12-04
2007-12-03
2007-12-02
2007-12-01
2007-11-29
2007-11-28
2007-11-26
2007-11-24