WindowsのVimで開いているファイルを関連付けにしたがって開く

Windowsにはopenコマンドとかないです!:!start %:!start start %だとE371: Command not foundになってしまう。:!%とするとシェルで処理されるので関連付けにしたがって開かれるもののコマンドプロンプトのウィンドウが残ってしまい邪魔くさい。コマンドプロンプト上ではMac OS Xのopenコマンドと似たような感じのstartコマンドも! start %のようにすれば使えるが、ウィンドウが残ってしまうのは同じ。試行錯誤の末に:!start cmd /c %とするとうまくいくことがわかった。

<Leader>oとかにキー割り当てすると良さそう。空白を含むパスへの対策に二重引用符でくくっておく。

nnoremap <Leader>o :!start cmd /c "%"

quickrunを使っていて、HTMLファイルをデフォルトのブラウザで開きたい場合は、$HOME/vimfiles/after/ftplugin/html.vimで以下のように設定するとうまくいく……と思う。

if !exists('b:quickrun_config')
  let b:quickrun_config = {}
endif

let b:quickrun_config.exec     = 'start cmd /c %s'
let b:quickrun_config.output   = '!'
let b:quickrun_config.shellcmd = '!%s'

Windowsではg:quickrun_config['*'].shellcmdの値がsilent !"%s" & pauseとなっているのでexecoutputを指定しただけではうまく動かず、コマンドプロンプトのウィンドウが開かれるだけだった。上記のようにshellcmdを設定してやると、!start cmd /c %を実行することになるのでうまくデフォルトのブラウザで開かれるようになり、コマンドプロンプトのウィンドウも直ぐに閉じられる。

なんかもっと簡単に実現することが出来そうな気がするんだけど、一応やりたいことは実現出来たので追究する気力がなくなった。


関係ないけど、quickrunのデフォルトの分割設定を変えようとして、

let g:quickrun_config.*.split = ''

とか.vimrcに書いて怒られた……。

if !exists('g:quickrun_config')
  let g:quickrun_config = {}
  let g:quickrun_config['*'] = {}
endif

let g:quickrun_config['*'].split = ''

とか書かないとダメらしい。いろいろ間違っててダメすぎる……。これであっているのかどうかもわからないという……。