好吧,让我们一步步解决这个问题:
:nnoremap <F6>:w<cr> :!start cmd C:\Program Files (x86)\Google\Chrome\Application\chrome.exe %<CR>
首先,lhs 之间缺少空格 (<F6>
)和:w...
右旋;您当前正在映射组合键<F6>:w<cr>
.
:nnoremap <F6> :w<cr> :!start cmd C:\Program Files (x86)\Google\Chrome\Application\chrome.exe %<CR>
这给了我一个打开的命令提示符,但没有 Chrome。你需要通过/C
or /K
以便剩余部分作为命令执行;cmd.exe /?
告诉你这个。我们先来使用/K
能够读取任何错误。
:nnoremap <F6> :w<cr> :!start cmd /K C:\Program Files (x86)\Google\Chrome\Application\chrome.exe %<CR>
我现在得到'C:\Program' is not recognized as an internal or external command, operable program or batch file.
;我们需要引用。我们可以手动将路径括在双引号中,但因为您可能想要处理通过以下方式传递的任何文件名%
,最好让 Vim 进行引用。为此,我们需要:execute
(插入表达式)和shellescape()
.
另一个毛茸茸的怪癖cmd.exe
就是一旦你使用引用,你就需要引用entire再次命令行。 (如果这超出了你的能力范围,请不要觉得愚蠢;微软和 MS-DOS 的兼容性是造成这种混乱的原因。Vim 在该领域也进行了改进;请确保至少使用版本 7.3.800,或者7.4。)
:nnoremap <F6> :w<cr> :execute '!start cmd /K "' shellescape('C:\Program Files (x86)\Google\Chrome\Application\chrome.exe', 1) shellescape(expand('%'), 1) . '"'<CR>
它会在 Chrome 中为我打开当前的 HTML 文件。为了完成最后的工作,只需去掉左边的命令提示符(/C
),并连接两个 Ex 命令,替换:w
与点播:update
:
:nnoremap <F6> :update<Bar>execute '!start cmd /C "' shellescape('C:\Program Files (x86)\Google\Chrome\Application\chrome.exe', 1) shellescape(expand('%'), 1) . '"'<CR>
您可以通过始终传递完整的绝对路径来使其更具弹性:
:nnoremap <F6> :update<Bar>execute '!start cmd /C "' shellescape('C:\Program Files (x86)\Google\Chrome\Application\chrome.exe', 1) shellescape(expand('%:p'), 1) . '"'<CR>