Vim 有没有更好的方法根据文件类型映射命令调用

Vim 有没有更好的方法根据文件类型映射命令调用,vim,Vim,在从记事本和记事本++切换到vim之后,我是一个新手,但在过去的四个月里,我一直只使用它。在my.vimrc中,我有一个根据文件扩展名自动更改命令调用的命令。例如,如果我正在编辑一个R文件,我可以按,vim执行!Rscript%:p,但如果我切换到python文件并按,vim将执行!python%:p。我通过将以下内容放入.vimrc中来实现这一点: autocmd BufRead *.R noremap <F5> :!Rscript %:p<cr> au

在从记事本和记事本++切换到vim之后,我是一个新手,但在过去的四个月里,我一直只使用它。在my.vimrc中,我有一个根据文件扩展名自动更改命令调用的命令。例如,如果我正在编辑一个R文件,我可以按
,vim执行
!Rscript%:p
,但如果我切换到python文件并按
,vim将执行
!python%:p
。我通过将以下内容放入.vimrc中来实现这一点:

    autocmd BufRead *.R noremap <F5> :!Rscript %:p<cr>
    autocmd BufRead *.pl noremap <F5> :!perl %:p<cr>
    autocmd BufRead *.py noremap <F5> :!python %:p<cr>
autocmd BufRead*.R noremap:!Rscript%:p
autocmd BufRead*.pl noremap:!perl%:p
autocmd BufRead*.py noremap:!python%:p

我想知道这是否是vim基于命令调用执行它的“正确”方式。我知道我使用的一些python文件没有*.py扩展名,因此在这种情况下设置是无用的

如果您有
BufRead*.py
,则只有在加载
*.py
缓冲区/文件时才会触发自动命令

vim具有文件类型检测机制

Vim可以检测编辑的文件类型。这是由 检查文件名,有时检查 特定文本的文件

您应该打开
:文件类型


并在autocmd中使用
文件类型
事件。

您需要做两件事:

  • 使用
    noremap
    选项创建本地到特定缓冲区的映射
  • 仅加载特定文件类型的映射
这可以通过
.vimrc
中的
autocmd
FileType
事件来完成,如下所示:

autocmd FileType perl noremap <buffer> <F5> :!perl %:p<cr>
我个人更倾向于ftplugin方法,但是在
.vimrc
文件中有一个万事俱备的插件会很好

有关更多帮助,请参阅:

:h :au
:h FileType
:h map-local
:h ftplugin
可能的重复项:
:h :au
:h FileType
:h map-local
:h ftplugin