quickrun.vim の Cygwin 対応

Cygwinvim で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,
\  },
\}