Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在VIM中执行基于文件扩展名的操作?_Vim - Fatal编程技术网

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

如何在VIM中执行基于文件扩展名的操作?,vim,Vim,如果文件扩展名为.rb,我想在按下F5时在VIM中执行rubyf操作。 现在我只有 map <F5> :rubyf % <CR>. map:rubyf%。 但是我还想解释scheme文件,如果它的.scm或compile tex等使用相同的F5。如何检查文件扩展名并执行正确的绑定?你们是如何在G/VIM中编译不同的文件的?的答案很好地回答了这个问题。您可以为每个文件扩展名创建不同的autocmd。例如: au BufEnter,BufNew *.rb map <

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

map <F5> :rubyf % <CR>.
map:rubyf%。

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

的答案很好地回答了这个问题。

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

au BufEnter,BufNew *.rb map <F5> :rubyf % <CR>.
au BufEnter,BufNew*.rb地图:rubyf%。
有关autocmd的信息,请参见
:帮助autocmd

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


这方面的一个微小变化是根本不使用autocmds,而是使用一个外部脚本,当给定源文件名时,该脚本将确定要运行什么(ruby、scheme编译器、pychecker、C编译器等等)。然后只需将
makeprg
设置为始终运行该脚本。

使用
filetype
插件

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

在该文件中,仅当当前缓冲区的文件类型为ruby时,才放入希望包含的任何命令。它们将被适当地采购

如果要从scheme执行相同的操作,请创建另一个文件~/.vim/ftplugin/scheme/custom.vim``并执行相同的操作


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

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

在您的情况下,.vimrc中的以下行将执行您想要的操作。
autocmd BufRead,BufNewFile*.rb映射F5:rubyf%CR.

有关更多信息,请参见se:

这将需要:打开文件类型插件