VimShellで特定のコマンドが実行できない
VimShell(http://github.com/Shougo/vimshell)
Windows環境の話です。
私はTortoiseHgをインストールすると一緒に入るhg.exeを使用していますが、VimShellで実行しようとすると以下のメッセージが出て実行できません。
!!!vimproc#get_command_name: File "hg" is not found. function129_execute_line.. 129_execute_command_line..vimshell#parser#eval_script.. 136_execute_statement..vimshell#parser#execute_command..vimshell#execute_internal_command..vimshell#parser#execute_command..60.. 99_init_process..vimproc#plineopen3.. 39_plineopen.. 39_convert_args..vimproc#get_command_name, 行 58!!!
当然環境変数PATHは通っているし、:!hgは実行できます。さらにVimShellの補完候補にもhg.exeは出ています。
ちょっと調べた結果、これはVimShellというより、VimShellが使用しているvimprocの問題ではないかと思います。vimprocの内部で呼び出しているfindfile関数がhg.exeを見付けられないためにエラーが発生しています。(findfile関数の検索対象はPATHを元にしているようです。)PATHは通っているのになぜ実行できないのか?しばらくPATHの内容を見ていたら原因がわかりました。
…C:\Program Files\TortoiseGit\bin;C:\Program Files\TortoiseHg\;…
これは環境変数PATHの一部ですが、最後に\が付いていますね。どうも、パスの一番最後に\が付くとvimprocが実行ファイルを見付けられないようです。なので、一番最後の\を削除することで無事hg.exeを実行できました。