我的日常工作涉及使用Perl进行编码。在家里我玩弄Python和Erlang。对于Perl,我想用两个空格缩进我的代码。而Python的标准是4.我也有一些键绑定来打开函数声明,我想用所有的编程语言。 gVim如何实现这一点?gVim和多种编程语言
在那里,有没有办法为每种编程语言或类似的东西维护一个配置文件?
我的日常工作涉及使用Perl进行编码。在家里我玩弄Python和Erlang。对于Perl,我想用两个空格缩进我的代码。而Python的标准是4.我也有一些键绑定来打开函数声明,我想用所有的编程语言。 gVim如何实现这一点?gVim和多种编程语言
在那里,有没有办法为每种编程语言或类似的东西维护一个配置文件?
您应该能够通过利用文件类型与做......例如,添加到您的vimrc(和适当地修改为不同语言):
autocmd FileType python set tabstop=4|set shiftwidth=4|set expandtab
在$ HOME,使vim的/目录(或vimfiles /在Windows上),在其中创建ftplugin /目录,并在其中保留名为“perl.vim”或“python.vim”或“html.vim”或...
这些应该加载自动打开/创建给定文件类型的新文件,只要您不要忘记在.vimrc中添加:filetype plugin on
(或windows下的_vimrc)
然后,vim选项应该定义为:setlocal
(而不是:set
,否则它们的定义将覆盖默认的全局设置)。
映射定义为:n/i/v(nore)map <buffer>
以及缩写。命令是使用-b
选项定义的。没有插件的帮助,菜单就无法在本地生成。
local
, <buffer>
和-b
对于防止副作用是重要的。
如果您使用的是Windows,请参阅“:help dos-locations”。 – 2009-09-10 10:53:31
+1我不知道可以为单个缓冲区定义命令! – 2009-09-17 01:17:02
以下是我的操作方法。以下是我的.vimrc
的摘录,并且我保持每种语言的进一步配置,并在加载新缓冲区时加载这些配置。
" HTML
autocmd BufNewFile,BufRead *.html,*.htm,*.xhtml source ~/.vimhtml
" XML
autocmd BufNewFile,BufRead *.xml,*.xmi source ~/.vimxml
" Perl
autocmd BufNewFile,BufRead *.pl,*.pm source ~/.vimperl
请注意,虽然我源文件,我可以执行任何VIM命令或调用函数。例如加载一个新的Java文件,我这样做:
autocmd BufNewFile *.java call GeneratePackage()
其中GeneratePackage()
是VIM功能。
autocmd FileType ...更好,因为您将文件类型检测(使用BufNewFile)与针对该类型文件执行的操作分开。 – joeforker 2009-09-10 12:57:13
除了rangerchris的回答,你可能会考虑使用模式线。模式行告诉编辑器如何配置本身:
#!/usr/bin/perl
# vi: ts=4 sw=4 ht=4 et textwidth=76 :
use strict;
use warnings;
print "hello world\n";
这模式行告诉vi来使用4级字符的标签和自动缩进,用空格代替标签,而当光标到达76个字符应该插入一个换行符。
您可以控制Vim的读取模式行有两个变量(在.vimrc最有可能的设置):
set modeline
set modelines=5
的modeline
变量告诉Vim寻找模式行,如果它被设置。 modelines
变量告诉Vim从顶部和底部扫描多少行来寻找模式行(在这种情况下,如果它位于文件的第一行或最后五行,它将找到模式行)。
就像任何从不受信任的来源获取指令的系统一样,模式行可以是security threat,所以root
用户不应该使用模式行,并且应该保留Vim副本最新。
模式线的真正好处是它们是每个文件。大多数Perl人都是四个空格作为缩进的人,但我是一个八字符标签的人。在处理其他人的代码时,我会使用反映其用法的模式行。剩下的时间我用我自己的。
请勿覆盖默认设置。使用'setlocal'(或'setl')而不是'set'。您不希望最后一个autocmd的设置打破其他缓冲区。 – 2009-09-10 14:24:53
@Maxim - 良好的捕获... :-) – 2009-09-10 20:59:45
'set'命令接受多个选项。所以,写起来更容易:'set tabstop = 4 shiftwidth = 4 expandtab' – 2009-09-13 01:36:19