Vim:打造Linux程序员的编辑利器(ctags+cscope+taglist+code_complete)

来源:互联网 发布:两头usb数据插口线图片 编辑:程序博客网 时间:2024/06/18 13:23

http://smilejay.com/2012/10/vim-for-linux-programmer/


在2年前,写过一篇文章“Vim:打造Linux C/C++程序员的编辑器”,先在根据这两年的Vim使用经验对其进行一些补充和完善,以便在使用Vim时(偶尔忘记配置或快捷键)作为参考。经过适当的配置,配合一些快捷键,VIM会成为Linux上一个代码阅读、编辑的强大工具。

所谓“工欲善其事,必先利其器”,所谓“磨刀不误砍柴工“。
在Linux下,vim是一种最常见的编辑器,很多linux的发行版就自带了(不过 Ubuntu目前时需要自己安装的,默认只带了vi)。今天搞了半天了Vim,通过几个插件来武装我的vim,使其能向传说中的一样成为C/C++程序员的利器。
通过配置和插件,实现的功能有:语法高亮+自动缩进+函数自动补全+变量/函数的跟踪+列出源代码中的函数/变量等
用到的工具有:Vim+.vimrc配置文件+code_complete+ctags+taglist+cscope
使用效果:http://files.myopera.com/mbbill/files/code_complete.gif (亦在本文末尾处)
PS:这个效果非常炫的!~
这里不详细介绍Vim的各个插件的快捷键使用,只是列举一下自己的常用用法,也算个笔记吧。后面会有转载几篇文章详细描述各个插件的详细情况(太多了,其实我也记不住)。

vim 下载地址:http://www.vim.org
code_complete.vim插件http://www.vim.org/scripts/script.php?script_id=1764
ctags 一般安装完vim后都会有,ubuntu中好像是没附带安装,需要下载:http://www.vim.org/scripts/script.php?script_id=610
taglist 下载:http://www.vim.org/scripts/script.php?script_id=273
cscope 到其主页下载:http://cscope.sourceforge.net/
Ubuntu下安装这些包的命令为:

$sudo apt-get install vim$sudo apt-get install ctags  (exuberant-ctags)$sudo apt-get install cscope

一. vim 基本配置

1、配置文件的位置

在目录 /etc/vim/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。而在每个用户的主目录($HOME)下,都可以自己建立私有的配置文件(仅对这个用户有效),命名为:“.vimrc”。例如,/root目录下,通常已经存在一个.vimrc文件。我就是在自己的$HOME目录下新建了了.vimrc文件来配置的。

2、设置语法高亮显示

1) 打开.vimrc,添加以下语句来使得语法高亮显示:
syntax on
2) 如果此时语法还是没有高亮显示,那么在/etc目录下的profile文件中添加以下语句:
export TERM=xterm-color

3、设置C/C++自动缩进(添加以下set语句到.vimrc中)

1)不讨论制表符宽度为8还是为4个空格较好,这里设置(软)制表符宽度为8(Linus在规定Linux kernel中C代码的风格):
set tabstop=8
set softtabstop=8
2)设置缩进的空格数为8
set shiftwidth=8
另外,“set expandtab”选项会将TAB展开(被替换)为对应个数的空格,我一般不推荐设置这个选项。
3)设置自动缩进:即每行的缩进值与上一行相等;使用 noautoindent 取消设置:
set autoindent
4)设置使用 C/C++ 语言的自动缩进方式:
set cindent
5)设置C/C++语言的具体缩进方式(如下设置,仅作参考):
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
6)如果想在左侧显示文本的行号,可以用以下语句:
set nu
PS:自动缩进有两个选项:”set autoindent” 与 “set cindent”.
autoindent 就是自动缩进的意思,当你在输入状态用回车键插入一个新行,或者在 normal 状态用 o 或者 O 插入一个新行时,autoindent 会自动地将当前行的缩进拷贝到新行,也就是“自动对齐”,当然了,如果你在新行没有输入任何字符,那么这个缩进将自动删除。
cindent 就不同了,它会按照 C 语言的语法,自动地调整缩进的长度,比如,当你输入了半条语句然后回车时,缩进会自动增加一个 TABSTOP 值,当你键入了一个右花括号时,会自动减少一个 TABSTOP 值。

二. code_complete 配置

把下载的code_complete.vim拷贝到plugin目录下,一般都在(我的是)/usr/share/vim/vim72/plugin下 (不同的vim版本vim72可能时其他,我的目前时7.2版本)
在vim中使用<Tab>键就可以触发补全函数原型,插入代码片段等。具体补全的快捷键的定义(如in代表#include ” “),见:code_complete.vim文件中的定义。

三. ctags的使用

用ctags命令生成tags文件,ctags -R –-C-kinds=+p –-fields=+S /usr/include 应该算是建立索引表(默认会在当前目录生成tags文件),然后把生成的tags文件拷贝到你编程的目录。
注意:ctags -R 后面不加上绝对路径,就时建立当前目录的下所有文件的索引,那么建立的索引文件中都是写的相对路径,你将tags文件拷贝到其他目录去用时,它就会找不到相应的函数/变量等。
注意:运行vim的时候,必须在”tags”文件所在的目录下运行。否则,运行vim的时候还要用”:set tags=”命令设定”tags”文件的路径,这样vim才能找到”tags”文件。
-R”表示递归创建,也就包括源代码根目录下的所有子目录下的源程序。
“tags”文件中包括这些对象的列表:
用#define定义的宏
枚举型变量的值
函数的定义、原型和声明
名字空间(namespace)
类型定义(typedefs)
变量(包括定义和声明)
类(class)、结构(struct)、枚举类型(enum)和联合(union)
类、结构和联合中成员变量或函数

VIM用这个”tags”文件来定位上面这些做了标记的对象,下面介绍一下定位这些对象的方法:
1) 用命令行。在运行vim的时候加上”-t”参数,例如:
[/home/admin/src]$ vim -t foo_bar
这个命令将打开定义”foo_bar”(变量或函数或其它)的文件,并把光标定位到这一行。
2) 在vim编辑器内用”:ta”命令(是”tag”命令的缩写),例如:
:ta foo_bar
3) 最方便的方法是把光标移到变量名或函数名上,然后按下”Ctrl-]”。用”Ctrl-o”退回原来的地方。
在Vim中运行“:help tags”可以查询到ctags的用法。

四. cscope的配置与使用

可以用$ sudo apt-get install cscope命令来安装;
也可以从http://cscope.sourceforge.net/下载最新的cscope源码,对其进行编译和安装是比较简单的,如下所示。

[root@linux cscope-15.8a]# ./configure[root@linux cscope-15.8a]# make[root@linux cscope-15.8a]# make install[root@linux cscope-15.8a]# /usr/local/bin/cscope --version/usr/local/bin/cscope: version 15.8a

也许在“make”编译是可能会报一些语法的错误,比如curses.h文件没找到,就需要安装“ncurese-dev”这个软件包。
在需要建立cscope索引的源码目录下,运行“cscope -Rbq . ”(我常用的)命令即可生成cscope索引。
然后用Vim打开一个c源程序文件,在vim中运行命令“:cs add cscope.out”来加载索引文件(如果运行Vim时所在目录中就有cscope.out,则Vim会自动加载cscope索引)。使用“cs”开头的命令(如常见的“:cs fine XX YY)就可以使用强大的cscope功能了。
对于“cs find”支持的查询命令简单描述如下:

s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能d: 查找本函数调用的函数c: 查找调用本函数的函数t: 查找指定的字符串e: 查找egrep模式,相当于egrep功能,但查找速度快多了f: 查找并打开文件,类似vim的find功能i: 查找包含本文件的文件

例如:”:cscope find s kvm_assign_device”、”:cs f g kvm_assign_device”、”:cs f d kvm_assign_device”等等(注:cscope命令缩写为cs,而fine缩写为f)。

在~/.vimrc中添加set cscopequickfix=s-,c-,d-,i-,t-,e-
这样通过:cs find xxx查找某个符号后,会立即跳转到第一个找到该符号出现的位置;

另外,可以在vim命令行下键入“:copen”来打开quickfix窗口,来显示所有出现的位置(即 查找结果)。

在vim中,执行“:cs help”命令可以显示cscope的命令帮助手册。

ctags和cscope在Linux世界中是非常流行的,在Linux kernel中的Makefile就专门定义了“tags”和“cscope”这两个目标的,可以直接“make tags”生成tags文件,可以直接“make cscope”生成cscope索引文件,如下所示。

[root@linux linux.git]# make help | grep -E '(tags|cscope)'  tags/TAGS       - Generate tags file for editors  cscope          - Generate cscope index  gtags           - Generate GNU GLOBAL index[root@linux linux.git]# make tags  GEN     tags[root@linux linux.git]# ll tags-rw-r--r-- 1 root root 138602743 Oct 19 14:10 tags[root@linux linux.git]# make cscope  GEN     cscope[root@linux linux.git]# ll cscope.*-rw-r--r-- 1 root root    652930 Oct 19 14:10 cscope.files-rw-r--r-- 1 root root 267625646 Oct 19 14:11 cscope.out-rw-r--r-- 1 root root  53239808 Oct 19 14:11 cscope.out.in-rw-r--r-- 1 root root 384600480 Oct 19 14:11 cscope.out.po

cscope的选项
-R :表示包含此目录的子目录,而非仅仅是当前目录;
-b :此参数告诉cscope生成数据库后就自动退出;
-q :生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
可能会用到的其他选项:
-k :在生成索引时,不搜索/usr/include目录;
-i :如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪里去找源文件列表;
-I dir :在-I选项指出的目录中查找头文件
-u :扫描所有文件,重新生成交叉索引文件;
-C :在搜索时忽略大小写;
-P path:在以相对路径表示的文件前加上的path,这样你不用切换到你数据库文件的目录也可以使用它了。

五. taglist的配置和使用

下载taglist压缩包,并解压,

$sudo cp plugin/taglist.vim /usr/share/vim/vim72/plugin/ $sudo cp doc/taglist.txt /usr/share/vim/vim72/doc/

当然,如果仅对当前用户有效,则可以复制上面的文件到 $HOME/.vim/ 目录下。

打开vim,用 “:helptags .”来配置好帮助文件;重启vim,用“:TlistToggle”来打开和关闭 taglist窗口。

也可以用“:TlistOpen”命令打开并将输入焦点至于标签列表窗口,“:TlistClose”命令 关闭 tag列表窗口;

可以用“:help taglist”来获得更多帮助信息。

另外,在左侧打开了标签列表窗口,可以用“ctrl-W + W”来进行源码窗口和标签窗口之间切换(其本质也是一个Vim的普通窗口)。

下图演示了一下VIM强大的C/C++程序代码编辑能力,动心了吗?马上开始使用VIM吧。
a powerful VIM editor



vim插件管理工具

vim插件管理工具——vim-addons

通过vim-addons,我们可以管理vim插件。我们在$ sudo apt-get install vim vim-scripts vim-doc时,一般会自动安装上vim-addons。若未安装可通过$ sudo apt-get install vim-scripts vim-doc vim-addon-manager手动安装。安装完成后,就可以用vim-addons管理vim插件了。

可以通过命令行下运行$ vim-addons status查看系统中已有的vim-scripts中包含的插件及其状态(这里似乎不会包含手动安装的插件):

jeremy@ENVY:~$ vim-addons status# Name                     User Status  System Statusalign                       removed       removed     alternate                   removed       removed     bufexplorer                 removed       removed     calendar                    removed       removed     closetag                    removed       removed     colors sampler pack         removed       removed     cvsmenu                     removed       removed     debPlugin                   removed       removed     detectindent                removed       removed     doxygen-toolkit             removed       removed     editexisting                removed       removed     enhanced-commentify         removed       removed     gnupg                       removed       removed     info                        removed       removed     justify                     removed       removed     lbdbq                       removed       removed     markdown-syntax             removed       removed     matchit                     removed       removed     minibufexplorer             installed     removed     nerd-commenter              removed       removed     omnicppcomplete             installed     removed     po                          removed       removed     project                     installed     removed     python-indent               removed       removed     secure-modelines            removed       removed     snippetsEmu                 removed       removed     sokoban                     removed       removed     supertab                    removed       removed     surround                    removed       removed     taglist                     installed     removed     tetris                      removed       removed     utl                         removed       removed     vcscommand                  removed       removed     vimplate                    removed       removed     whatdomain                  removed       removed     winmanager                  removed       removed     xmledit                     removed       removed

此时,我们要安装vim官方插件,即可通过下面的命令(xxxx代码上面列出来的插件名称):

$sudo vim-addons install xxxx

关于vim-addons命令的详细用法,可以通过“man vim-addons”查看其帮助文档。



参考资料:

http://blog.chinaunix.net/u2/74761/showart_1096872.html
http://www.linuxsir.org/bbs/showthread.php?p=2095747#post2095747 (vim很强大功能的介绍)
http://linux.chinaunix.net/bbs/thread-1036769-1-1.html
http://blog.chinaunix.net/u/553/showart_288387.html
http://zhwen.org/?p=articles/cscope-tags
http://blog.xuyu.org/?p=1147 (关于taglist)
将Vim改造为强大的IDE — Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)

2
2

2
2

2
2

2

2
2

2

阅读全文
0 0
原创粉丝点击