vimからコマンドを実行する_その2
Problem,Solution
Netrwを利用して、x:execしようにも動かないので、色々試すと更にはまったので、DOSプロンプトで挙動を確認する。
- 一般的に良くある、空白を含むフォルダ名を渡す
C:\>start C:\Documents and Settings\
ファイル C:\Documents が見つかりません。
- ダブルクォートで囲む
C:\>start "C:\Documents and Settings\" C:\> (もう一個、DOSプロンプトが起動する)
- ウィンドウタイトルを指定する
C:\>start "" "C:\Documents and Settings\" rem シングルクォート ' で囲むとエラーなので注意
無事、エクスプローラを起動させる事に成功。
Netrwの動作
g:netrw_browsex_viewer = '' の時 " vim72-kaoriya-w32j/runtime/autoload/netrw.vimの以下の判定に入る " :省略 elseif has("win32") || has("win64") if executable("start") " 偽 うちのPCだけ? " call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)) exe 'silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1) elseif executable("rundll32") " 真 " call Decho('exe silent !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)) exe 'silent !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1) else call netrw#ErrorMsg(s:WARNING,"rundll32 not on path",74) endif call inputsave()|call input("Press <cr> to continue")|call inputrestore() let ret= v:shell_error " :省略
問題点
if executable("start") " 偽、うちの環境だけ? elseif executable("rundll32") " 真 exe 'silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1) " ←問題はココ
サンプル
C:\>start rundll32 url.dll,"C:\Documents and Settings\" " 実行結果:何も起きない、詳細は不明 C:\>rundll32 url.dll,"C:\Documents and Settings\" " 実行結果:何も起きない、詳細は不明