Vim是一个强大的文本编辑器。我们在win32平台下用VC写代码的时候,常常比较习惯VC给予的一些格式控制和代码补全功能,而这些功能都是可以在 vim中实现的,并且,已经有前人为我们写好了插件脚本,我们只需要非常简单的设置,就可以迅速的构建出类似VC的C++编译环境。
Vim的配置文件通常在~/.vimrc中。我们首先可以加入这样两句:
syntax on //语法高亮打开,这样我们就可以看倒C/C++的关键字成为了彩色;
:set cin! //C缩进打开,这样vim会自动判断缩进的设置;
完成这样的设置后,当我们创建或者打开vim所能识别的C/C++源文件的时候,我们就可以看到关键字的颜色以及自动的缩进了。
需要指出的一点是,按照Unix源程序的习惯,我们最好以ASCII编码来写程序,而Debian的内部编码默认是UTF-8。当然,如果我们vim创建的文件没有汉字等其他字符的时候,产生的文件自动是ASCII编码的,但是,某些插件,比如vim的c-support插件会自动添加文件的创建日期,这样,因为我们系统默认语言一般是zh_CN,所以就会产生中文的日期显示。所以,一个解决方法是在运行创建cpp文件的vim的时候,指定使用的语言,或者,干脆做一个alias来简单使用:
alias cvim='LC_ALL=C vim'
这样,就可以确保创建的cpp文件不带非ASCII字符。
接下来,我们简单了解一下ctags。简单说,ctags是为许多计算机语言的源代码文件做索引,以提供给编辑器(比如我们的vim)使用的。我们先看看ctags的帮助:
ctags --help
以下信息是我们将用到的:
-R Equivalent to --recurse.
--recurse=[yes|no] Recurse into directories supplied on command line [no].
--languages=[+|-]list
Restrict files scanned for tags to those mapped to langauges
specified in the comma-separated 'list'. The list can contain any
built-in or user-defined language [all].
--fields=[+|-]flags
Include selected extension fields (flags: "afmikKlnsStz") [fks].
--extra=[+|-]flags
Include extra tag entries for selected information (flags: "fq").
我们用这样的命令在源文件所在的目录运行:(用样,我们可以做一个alias,我们最后来讨论这个问题)
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q
其中参数的含义是:
--c++-kinds=+p : 为C++文件增加函数原型的标签
--fields=+iaS : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)
--extra=+q : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全
好了,现在准备知识讲完了。我们先实现C++对象用.或者->调用方法的时候自动产生选择的下拉菜单。我们需要的插件是OmniCppComplete,在vim官方这里下载:http://www.vim.org/scripts/script.php?script_id=1520
下载到的是一个压缩包,解压到~/.vim/下相应的目录就可以了。另外,我们需要在~/.vimrc中打开装载插件:
:filetype plugin on
(或许还需要打开vim对源代码的识别,不过我是没有用到,Debian 4.0,如果需要的话,再加上:filetype indent on)
另外,我们关闭vim默认的预览窗口:
:set completeopt=longest,menu
这样,当我们创建了对象,用.或者->的时候,就会自动调出类方法的选择窗口了。
另外一个常见的补全是对函数的补全,也有现成的插件可以用code_complete:http://www.vim.org/scripts/script.php?script_id=1764
这个安装就更简单了,直接把code_complete.vim拷贝到~/.vim/plugin/下面就可以了。
插件的使用方法是,当写完一个函数,并打上左括号(之后,按tab键就可以看倒函数参数列表了,包括重载的函数。
最后,我们不希望记那么多参数,希望使用起来简单一些,我们只需要在bash运行的时候申明我们的两个alias就可以了。在~/.bashrc中添加:
alias vctags='ctags -R --c++-kinds=+p --fields=+iaS --extra=+q'
alias cvim='LC_ALL=C vim'
关闭终端后重启动,可以用type查看我们的新命令已经生效了:
lf426@fleet:~$ type vctags
vctags is aliased to `ctags -R --c++-kinds=+p --fields=+iaS --extra=+q'