exists({:command}) に関する覚書
:help exists() 読んでて知らなかったので覚書。
さて、特定のコマンドや変数、関数が存在するかどうかを判定する時に使用する exists() 関数ですが、コマンドの有無を判定する場合、戻り値に複数の意味が存在します。
:help exists() から引用するとこういう風になっています。
:cmdname exコマンド: 組み込みコマンド、ユーザ定 義コマンド、コマンド修飾子|:command|。 戻り値: 1 コマンド名の先頭に一致 2 コマンド名に完全一致 3 複数のユーザ定義コマンドに一致 コマンドが定義されているかどうかを判定 するには、必ず戻り値が2であるかを確認 すること。
実際に使ってみるとこんな感じ。
[ソース]
command! -nargs=+ \ Assert if !(<args>) | echoerr 'assertion failure' | endif Assert exists("Hoge") == 0 command! Hoge : command! HogeFoo : command! HogeBar : Assert exists(":Hoge") == 2 Assert exists(":HogeFoo") == 2 Assert exists(":HogeBar") == 2 delcommand Hoge " :HogeFoo と :HogeBar に一致 Assert exists(":Hoge") == 3 delcommand HogeFoo " HogeBar の先頭 Hoge に一致 Assert exists(":Hoge") == 1 " コマンドの有無を確認する場合は 2 で判定する if exists(":Hoge") == 2 :Hoge endif