vim 中的文件类型快捷键

vim 中的文件类型快捷键

我在 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++ShiftF10,我的 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.vimJavaScript 映射。

但是,这并不能解决您的问题。您需要使映射成为缓冲区本地映射。对于 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

相关内容