gVim和多种编程语言

15 投票
4 回答
3587 浏览
提问于 2025-04-15 14:12

我平时的工作是用Perl编程。在家里我会玩玩Python和Erlang。对于Perl,我想把代码缩进设置为两个空格,而Python的标准缩进是四个空格。此外,我还有一些快捷键可以用来打开函数声明,我希望在所有编程语言中都能使用这些快捷键。请问我该如何在gVim中实现这些功能?

也就是说,有没有办法为每种编程语言维护一个配置文件或者类似的东西?

4 个回答

7

除了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个字符的制表符。当我处理别人的代码时,我会使用一个反映他们使用习惯的模型行。其余时间我则使用自己的设置。

25

在你的 $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 这几个东西很重要,可以防止一些意外的副作用。

23

你可以通过利用文件类型来实现这个功能……比如,把下面的内容添加到你的vimrc文件中(并根据不同的编程语言进行适当修改):

autocmd FileType python set tabstop=4|set shiftwidth=4|set expandtab

撰写回答