vim-users.jp

Hack #127: !を含む外部コマンドを実行する

Posted at 2010/02/25
このエントリーをはてなブックマークに追加

問題

UNIXのechoコマンドで"hello!"と表示させる必要があるとします。Vimの:!を使えば出来そうな気がします。試してみましょう。

:!echo helloecho 'echo echo 1'
[No write since last change]
helloecho echo echo 1

なにやら狂ったような返答がきました。これは一体…。

※ 実行結果は人によって異なります。

解決

次のようにして!をエスケープします。

:!echo hello\!
[No write since last change]
hello!

次のようにしても、エスケープされませんのでご注意ください。

:!’echo hello!’

解説

ヘルプ:h :!によると、:!の中での!は前回実行した:!の引数になるそうです。 迷惑でしかない恐ろしい仕様です。('cpoptions'に依存するようです)

プラギンを作るときにハマる仕様です。:!を使うときによくわからない挙動があれば、まずは!のエスケープ漏れがないか確認してみましょう。

ujihisa

もどる
blog comments powered by Disqus