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'
プラギンを作るときにハマる仕様です。:!
を使うときによくわからない挙動があれば、まずは!
のエスケープ漏れがないか確認してみましょう。
もどる
blog comments powered by Disqus