Hack #158: ユーザコマンドを定義する
Posted at 2010/06/29ツイート
: でコマンドラインモードに入ると使えるコマンドは、ユーザが自由に定義することができます。
定義方法
:command
コマンドを使用します。書式は以下のようになります。
:command[!] [{属性}...] {コマンド名} {実行するコマンド}
これを見てわかるように、コマンドを定義すると言うことは誤解を恐れずに言うと別のコマンドに対するショートカットを定義しているに過ぎません。
複雑なことをしたい場合、ここは大抵関数の呼び出しになります。
:command
自体に ! を付けた場合、同名のコマンドが定義済みだった場合に上書きします。通常はエラーになります。
コマンド名
コマンド名は、組み込みコマンドと区別が付くように大文字で始めなくてはいけません。また、コマンド名には英数字のみ使用できます。
属性
属性は、-{属性名}
もしくは -{属性名}={引数}
の形式で指定します。詳細な説明は :help に譲るとして、ここでは概要を紹介します。
- -nargs
-
コマンドの引数の数を指定します。
-nargs=0 0 個 -nargs=1 1 個 -nargs=* 0 個以上 -nargs=? 0 個もしくは 1 個 -nargs=+ 1 個以上 - -complete
-
コマンドの補完方法を指定します。
-complete=augroup オートコマンドのグループ -complete=buffer バッファ -complete=command Ex コマンド(と、引数) -complete=dir ディレクトリ -complete=environment 環境変数 -complete=event オートコマンドのイベント -complete=expression Vimの式 -complete=file ファイルとディレクトリ -complete=shellcmd シェルコマンド -complete=function 関数 -complete=help ヘルプの主題 -complete=highlight 強調グループ -complete=mapping マップ -complete=menu メニュー -complete=option オプション -complete=tag タグ -complete=tag_listfiles CTRL-D を押した時にタグ、ファイル名を表示 -complete=var ユーザ変数 -complete=custom,{func} {func}によるユーザ定義の補完 -complete=customlist,{func} {func}によるユーザ定義の補完 - -range
-
コマンドに範囲(
:[range]Command
)を指定できるようにします。この属性がない場合、範囲の指定はできません。属性の引数で無指定時の初期値を指定します。-range 範囲指定。無指定時は現在行 -range=% 範囲指定。無指定時はファイル全体(1,$) -range=N 範囲指定。無指定時は任意の数字 N - -count
-
コマンドにカウント(
:[N]Command [N]
) を指定できるようにします。この属性がない場合、カウントの指定はできません。属性の引数で無指定時の初期値を指定します。-count カウント指定。無指定時は 0 -count=N カウント指定。無指定時は任意の数字 N - -bang
- コマンドに ! を付けられるようになります。
- -bar
-
コマンドの後ろに | を付けることで別のコマンドを実行することができます。また、" はコメントの開始になります。
コマンドの引数に | や " を含めたい場合は、| や " とします。
別の言い方をすると、普通に定義したコマンドの引数は
:map
系のコマンドのように扱われますが、-bar を付けることでその他のコマンドのような扱いになります。 - -register
:delete
や:yank
のように、1つ目の引数にレジスタ名を指定できます。- -buffer
- バッファローカルなコマンドになります。
{実行するコマンド}で使える書式
実行するコマンドを指定する箇所では、以下の <…> の形式の特別な文字列を使用できます。
- <line1>
- 指定された範囲の最初の行
- <line2>
- 指定された範囲の最後の行
- <count>
- 与えられたカウント
- <bang>
- -bang がある場合で、コマンドが ! 付きで実行された場合は ‘!’ と言う 1 文字に、それ以外は空文字列になります。
- <reg> <register>
- レジスタ名に置換されます。指定なしの場合は空文字列になります。
- <args>
- 与えられた通りのコマンド引数。カウントやレジスタは含まれません。
- <lt>
- ‘<’文字。特別な文字列をそのままの意味で使用したい場合に使います。
特別な文字列の最初に q- を加えると、式の文字列として扱えるようにクォートされます。 例えば、<args> の代わりに <q-args> を指定すると abc は "abc" に、a"bc は "a\"bc" に置き換えられます。引数がない場合は空文字列になります。
<f-args> を使うと、引数を空白で区切ったものを関数の引数として渡せるようにそれぞれをクォートしてカンマで区切ったものに展開します。 実際のルールはもう少し複雑です。詳細は :help <f-args> を参照してください。
thincaもどる
blog comments powered by Disqus