如何在VIM中执行基于文件扩展名的操作?

时间:2009-05-24 04:16:54

标签: vim

如果文件的扩展名为.rb,我按F5时要在VIM中执行rubyf操作。 现在我只有

map <F5> :rubyf % <CR>.

但我也想解释方案文件,如果它的.scm或使用相同的F5编译tex等。如何检查文件扩展名并执行正确的绑定?你们如何在G / VIM中编译不同的文件?

4 个答案:

答案 0 :(得分:12)

您可以为每个文件扩展名创建不同的autocmd。例如:

au BufEnter,BufNew *.rb map <F5> :rubyf % <CR>.

有关autocmds的信息,请参阅:help autocmd

针对您的特定问题的更好方法是将<F5>映射到始终调用:make %,然后使用autocmd为每种文件类型设置makeprg选项(使用{{1当你这样做以获得最佳效果时)。这不是用于将ruby加载到Vim中(正如您似乎正在做的那样),而是用于调用外部编译器/解释器/ linter。这基本上就是我的工作。这样做的好处是Vim可以解释错误和警告并自动跳转到代码中的问题。您还可以显示错误/警告列表。有关此问题的详情,请参阅setlocal,以及:help quickfix'makeprg':make:copen的帮助主题。

稍微有点不同就是不使用autocmds,而是要有一个外部脚本,当给定源文件名时会指出要运行的内容(ruby,你的方案编译器,pychecker,你的C编译器,等等) 。然后只需将'errorformat'设置为始终运行该脚本。

答案 1 :(得分:4)

使用filetype插件。

创建文件~/.vim/ftplugin/ruby/custom.vim

在该文件中,仅当当前缓冲区的文件类型为ruby时,才放置您想要包含的任何命令。他们会被恰当地采购。

如果你想从方案做同样的事情,创建另一个文件〜/ .vim / ftplugin / scheme / custom.vim``并做同样的事情。

每次在vim中加载文件时,它都会检测文件类型,并加载与您的文件类型对应的所有插件。

答案 2 :(得分:4)

自动命令是你的朋友。
它的定义如下:
:au[tocmd] [group] {event} {pat} [nested] {cmd}

在您的情况下,.vimrc中的以下行将执行您想要的操作 autocmd BufRead,BufNewFile *.rb map &lt;F5&gt; :rubyf % &lt;CR&gt;.

了解更多信息se:
http://www.ph.unimelb.edu.au/~ssk/vim/autocmd.html

答案 3 :(得分:1)

这在this question的答案中得到了相当好的回答。