如果文件的扩展名为.rb,我按F5时要在VIM中执行rubyf操作。 现在我只有
map <F5> :rubyf % <CR>.
但我也想解释方案文件,如果它的.scm或使用相同的F5编译tex等。如何检查文件扩展名并执行正确的绑定?你们如何在G / VIM中编译不同的文件?
答案 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 <F5> :rubyf % <CR>.
了解更多信息se:
http://www.ph.unimelb.edu.au/~ssk/vim/autocmd.html
答案 3 :(得分:1)
这在this question的答案中得到了相当好的回答。