quickrun.vim の Cygwin 対応
Cygwin の vim でquickrunを使用するとき、渡すファイルが Windowsのパスでないと動かないケースがある。
例えば、javascriptファイルを cscript に渡したいというケース
cscript /tmp/vIJIuwd/0.js
では動かないわけで、正しくは
cscript C:\cygwin\tmp\vIJIuwd\0.js
みたくならないといけない。
Cygwinでは、たまにあるケースなので、cygpath というコマンドが用意されていて、Windowsパスに変換する場合は、cygpath -w path-to-file
とすれば良い。
で、パッチを書いてみた。Vim scriptは超初心者なのでもっと良い方法がありそうだけど...。
diff --git a/autoload/quickrun.vim b/autoload/quickrun.vim index 70264b3..c550850 100644 --- a/autoload/quickrun.vim +++ b/autoload/quickrun.vim @@ -27,6 +27,7 @@ let g:quickrun#default_config = { \ 'eval_template': '%s', \ 'shellcmd': s:is_win ? 'silent !"%s" & pause' : '!%s', \ 'running_mark': ':-)', +\ 'convert_win_path': 0, \ }, \ 'awk': { \ 'exec': '%c -f %s %a', @@ -581,6 +582,9 @@ function! s:Runner.build_command(tmpl) " {{{2 for [key, value] in rule if 0 <= index(file, key) let value = 'fnamemodify('.value.',submatch(1))' + if has("win32unix") && config.convert_win_path + let value = printf('substitute(system("cygpath -w " . %s), "\n$", "", "")', value) + endif if key =~# '\U' let value = printf(config.command =~ '^\s*:' ? 'fnameescape(%s)' \ : 's:shellescape(%s)', value)
RCファイル等にconvert_win_path
を設定することで、Cygwinの場合にはWindowsパスに変換されるようにした...つもり。
let g:quickrun_config = { \ 'javascript': { \ 'command': 'cscript', \ 'convert_win_path': 1, \ }, \}