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
となっているのでexec
とoutput
を指定しただけではうまく動かず、コマンドプロンプトのウィンドウが開かれるだけだった。上記のように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 = ''
とか書かないとダメらしい。いろいろ間違っててダメすぎる……。これであっているのかどうかもわからないという……。