【发布时间】:2010-11-27 03:10:34
【问题描述】:
我的日常工作是使用 Perl 进行编码。我在家里玩 Python 和 Erlang。对于 Perl,我想用两个空格缩进我的代码。而对于 Python,标准是 4。此外,我还有一些键绑定来打开函数声明,我想将它们用于所有编程语言。如何在 gVim 中实现这一点?
有没有办法为每种编程语言或类似的东西维护一个配置文件?
【问题讨论】:
我的日常工作是使用 Perl 进行编码。我在家里玩 Python 和 Erlang。对于 Perl,我想用两个空格缩进我的代码。而对于 Python,标准是 4。此外,我还有一些键绑定来打开函数声明,我想将它们用于所有编程语言。如何在 gVim 中实现这一点?
有没有办法为每种编程语言或类似的东西维护一个配置文件?
【问题讨论】:
在您的 $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
【讨论】:
set 命令接受多个选项。所以,写起来更容易:set tabstop=4 shiftwidth=4 expandtab
除了 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 人是四个空格作为缩进的人,但我是一个八字符制表人。在处理其他人的代码时,我使用反映他们使用情况的模式行。其余时间我用我自己的。
【讨论】:
这就是我的做法。下面是我的.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 函数。
【讨论】: