vimのコマンドライン補完関数の基本的な作り方まとめ。
書式
コマンドに独自の補完関数を指定するときは、コマンド定義時に引数に-complete=customlist,{func}
を指定する。
command!-nargs=1-complete=customlist,{func} {cmd} {rep}
補完関数は補完候補のリストを返せばいい。
function {func}(lead, line, pos)return ['abc','efg']
endfunction
引数の意味
仮引数名 | 説明 |
---|---|
lead | カーソル下の引数文字列 |
line | コマンド名を含めたコマンドライン全体の文字列 |
pos | lineの先頭文字を0とした時のカーソル位置 |
サンプル
:edit
をラップしただけの:Edit
コマンドと補完候補を3つ返すだけの補完関数。
" コマンドを定義
command!-nargs=1-complete=customlist,CompSamp Edit :edit <args>" 補完関数を定義function! CompSamp(lead, line, pos)return ['~/.bashrc','~/.zshrc','~/vimrc']
endfunction
デバッグ
補完関数中では出力ができないようなので、:echomsg {str}
でメッセージ領域に出力して、:message
コマンドで確認する。
デバッグ (vimconsole)
毎回:message
を呼ぶのが面倒ならrbtnn/vimconsoleを使う手もある。
プラグインを導入したら以下の設定をするといい。
letg:vimconsole#auto_redraw =1
最低限の使い方説明(詳細はdocを参照)。
:VimConsoleOpen # 出力用ウィンドを開く。
:VimConsoleLog 'message' # メッセージを出力する。
参考資料
:h :command-completion-customlist
複雑な補完を書きやすくするためのプラグインもあるらしい(使ったこと無い)。
LeafCage/lim.vim