2

从记事本和记事本++切换后,我是 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>

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

4

2 回答 2

5

你需要做两件事:

  • 使用. <buffer>_noremap
  • 仅加载特定文件类型的映射。

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

autocmd FileType perl noremap <buffer> <F5> :!perl %:p<cr>

另一种方法是创建一个文件类型插件。(查看:h ftplugin更多详情)

A simple example is do create a file named, ~/.vim/ftplugin/perl.vim and place your mappings inside like so:

nnoremap <buffer> <F5> :!perl %:p<cr>

I personally lean more towards the ftplugin approach but having a everything in your .vimrc file can be nice.

For more help see:

:h :au
:h FileType
:h map-local
:h ftplugin
于 2013-09-17T10:40:06.333 回答
0

如果有BufRead *.py,自动命令仅在加载*.py缓冲区/文件时触发。

vim 有文件类型检测机制。

Vim 可以检测被编辑的文件类型。这是通过检查文件名来完成的,有时还通过检查文件内容中的特定文本来完成。

你应该换:filetype on

并在您的自动命令中使用FileType事件。

于 2013-09-17T10:02:54.453 回答