Vim, 引数付きユーザー定義コマンドの書き方


結論

.vimrc
:command! -nargs=? UE UltiSnipsEdit <args>

経緯

最近スニペット管理をするようになり、UltiSnippetsを使うようなったんですが、スニペット編集の際に:UltiSnipsEditを打とうとタブ補完をすると:UltiSnipsで止まってしまい不便だったので:UEでいけるようにできないか調べました。

説明

ユーザー定義コマンドは以下のように定義するようです。

:com[mand][!] [{attr}...] {cmd} {rep}

com!, command!はコマンドの強制上書き、
{attr}でコマンドの属性を記述、(上記で言う-nargs=?
{cmd}で定義するコマンド名(上記で言うUE
{rep}が定義コマンドを実行した際の代替テキスト(上記で言うUltiSnipsEdit <args>

今回使用した-nargsは、引数の数などを指定することができます。
(例えば-nargs=?の場合は0または1つの引数が許容)(:help nargs参照)

						*E175* *E176* *:command-nargs*
By default, a user defined command will take no arguments (and an error is
reported if any are supplied).  However, it is possible to specify that the
command can take arguments, using the -nargs attribute.  Valid cases are:

	-nargs=0    No arguments are allowed (the default)
	-nargs=1    Exactly one argument is required, it includes spaces
	-nargs=*    Any number of arguments are allowed (0, 1, or many),
		    separated by white space
	-nargs=?    0 or 1 arguments are allowed
	-nargs=+    Arguments must be supplied, but any number are allowed

Arguments are considered to be separated by (unescaped) spaces or tabs in this
context, except when there is one argument, then the white space is part of
the argument.