我在 vimrc 文件中添加了以下 4 行以添加快捷方式(在浏览器中运行当前 *.html 缓冲区并在节点中运行当前 *.js 文件):
autocmd filetype html map <C-S-F10> :sav %<CR>:! chromium-browser %<Enter>
autocmd filetype html inoremap <C-S-F10> <Esc>:sav %<CR>:! chromium-browser %<Enter>
autocmd filetype javascript map <C-S-F10> :sav %<CR>:! node %<Enter>
autocmd filetype javascript inoremap <C-S-F10> <Esc>:sav %<CR>:! node %<Enter>
当我只打开 html 文件或 JavaScript 文件时,它工作正常。但是当我在不同的缓冲区中打开这些文件类型的任意组合(使用选项卡)并想在浏览器中打开 HTML 文件并按Ctrl++Shift时F10,我的 HTML 文件会转到 Node,这会引发编译错误。
进步:
当我输入时,:set filetype
它显示html
*.html 和javascript
*.js 文件。因此问题不在于文件类型不正确。
我尝试设置Alt++快捷方式以在浏览器中打开,这在某种程度上解决了我的问题。现在,当两种文件类型以及没有文件类型的文件同时打开时,我可以使用 ++ 在浏览器中打开任何(html、js 和纯文本)文件类型,Shift并将其发送到 Node 以使用++进行编译。为什么会发生这种情况?F10AltShiftF10CtrlShiftF10
这是我的vimrc文件。Vim 版本是 7.4
答案1
最好将文件类型插件添加到用户 vim 运行时目录的后续部分,并在那里定义映射而不使用autocmd
。
例如,~/.vim/after/ftplugin/html.vim
您可以放入 HTML 映射和~/.vim/after/ftplugin/javascript.vim
JavaScript 映射。
但是,这并不能解决您的问题。您需要使映射成为缓冲区本地映射。对于 HTML 缓冲区,请尝试以下操作:
map <buffer> <C-S-F10> :sav %<CR>:! chromium-browser %<Enter>
inoremap <buffer> <C-S-F10> <Esc>:sav %<CR>:! chromium-browser %<Enter>
对于 JavaScript 缓冲区来说,情况如下:
map <buffer> <C-S-F10> :sav %<CR>:! node %<Enter>
inoremap <buffer> <C-S-F10> <Esc>:sav %<CR>:! node %<Enter>
看:
:help :map-local