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

Jos*_*ant 2 vim

从Notepad和Notepad ++切换后我是vim的新手,但过去四个月我一直在使用它.在我的.vimrc中,我有一个命令可以根据文件扩展名自动更改命令调用.例如,如果我正在编辑R文件,我可以按下<F5>并执行vim !Rscript %:p<cr>,但是如果我切换到python文件并按下<F5>,则vim执行!python %:p<cr>.我通过在我的.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>
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*ker 5

你需要做两件事:

  • 使用<buffer>选项for 创建特定缓冲区的本地映射noremap.
  • 仅为特定文件类型加载映射.

这可以通过你喜欢的事件autocmdFileType事件来完成.vimrc:

autocmd FileType perl noremap <buffer> <F5> :!perl %:p<cr>
Run Code Online (Sandbox Code Playgroud)

另一种方法是通过创建文件类型插件.(:h ftplugin详情请见)

一个简单的例子是创建一个名为的文件,~/.vim/ftplugin/perl.vim并将映射放在里面:

nnoremap <buffer> <F5> :!perl %:p<cr>
Run Code Online (Sandbox Code Playgroud)

我个人更倾向于ftplugin方法,但在.vimrc文件中包含所有内容都可以.

有关更多帮助请参阅:

:h :au
:h FileType
:h map-local
:h ftplugin
Run Code Online (Sandbox Code Playgroud)