gVim和多种编程语言
我平时的工作是用Perl编程。在家里我会玩玩Python和Erlang。对于Perl,我想把代码缩进设置为两个空格,而Python的标准缩进是四个空格。此外,我还有一些快捷键可以用来打开函数声明,我希望在所有编程语言中都能使用这些快捷键。请问我该如何在gVim中实现这些功能?
也就是说,有没有办法为每种编程语言维护一个配置文件或者类似的东西?
4 个回答
除了rangerchris的回答,你还可以考虑使用模型行(modelines)。模型行是告诉编辑器如何配置自己的指令:
#!/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要从文件的顶部和底部扫描多少行来寻找模型行(在这个例子中,如果模型行在文件的前五行或后五行内,它就能找到)。
像任何从不可信来源获取指令的系统一样,模型行可能会带来安全威胁,所以root
用户应该永远不要使用模型行,并且你应该保持你的Vim版本是最新的。
模型行的真正好处在于它们是针对每个文件的。大多数Perl程序员喜欢用4个空格缩进,但我更喜欢用8个字符的制表符。当我处理别人的代码时,我会使用一个反映他们使用习惯的模型行。其余时间我则使用自己的设置。
在你的 $HOME 目录下,创建一个 .vim/ 文件夹(如果你是 Windows 用户,就创建 vimfiles/ 文件夹),然后在里面再创建一个 ftplugin/ 文件夹。在这个文件夹里放一些名为 "perl.vim"、"python.vim"、"html.vim" 等的文件。
当你打开或创建特定类型的文件时,这些文件会自动加载,只要你在 .vimrc(在 Windows 下是 _vimrc)里加上 :filetype plugin on
这一行就可以了。
接下来,vim 的选项应该用 :setlocal
来设置,而不是 :set
,否则会覆盖掉默认的全局设置。
映射(也就是快捷键)用 :n/i/v(nore)map <buffer>
来定义,缩写也是这样。命令则是通过 -b
选项来定义的。菜单如果想要本地化,就需要借助插件的帮助。
local
、<buffer>
和 -b
这几个东西很重要,可以防止一些意外的副作用。
你可以通过利用文件类型来实现这个功能……比如,把下面的内容添加到你的vimrc文件中(并根据不同的编程语言进行适当修改):
autocmd FileType python set tabstop=4|set shiftwidth=4|set expandtab