Ubuntu用Vim打造Linux程序员编程神器(ctags+cscope+taglist+code_complete)

所谓“工欲善其事,必先利其器”,所谓“磨刀不误砍柴工“。

在Linux下,vim是一种最常见的编辑器,很多linux的发行版就自带了(不过 Ubuntu目前时需要自己安装的,默认只带了vi)。今天搞了半天了Vim,通过几个插件来武装我的vim,使其能向传说中的一样成为C/C++程序员的利器。

通过配置和插件,实现的功能有:语法高亮+自动缩进+函数自动补全+变量/函数的跟踪+列出源代码中的函数/变量等

用到的工具有:Vim+.vimrc配置文件+code_complete+ctags+taglist+cscope

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/ 下面,有个名为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中使用键就可以补全函数原型了。具体补全的快捷键的定义(如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的配置与使用

可以从http://cscope.sourceforge.net/下载最新的cscope源码,对其进行编译和安装是比较简单的,如下所示。

[root@jay-linux cscope-15.8a]# ./configure
[root@jay-linux cscope-15.8a]# make
[root@jay-linux cscope-15.8a]# make install
[root@jay-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)。

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

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

[root@jay-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@jay-linux linux.git]# make tags
  GEN     tags
[root@jay-linux linux.git]# ll tags
-rw-r--r-- 1 root root 138602743 Oct 19 14:10 tags
[root@jay-linux linux.git]# make cscope
  GEN     cscope
[root@jay-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

五. taglist的配置和使用

下载taglist压缩包,并解压,cp plugin/taglist.vim /usr/share/vim/vim72/plugin/ ; cp doc/taglist.txt /usr/share/vim/vim61/doc/
当然,如果仅对当前用户有效,则可以复制上面的文件到 $HOME/.vim/ 目录下。

启动vim,用 “:helptags .”来配置好帮助文件;重启vim,用“:TlistToggle”来打开和关闭taglist窗口(也可以用“:TlistOpen”命令打开并将输入焦点至于标签列表窗口,“:TlistClose”命令关闭标签列表窗口);可以用“:help taglist”来获得更多帮助信息。

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

时间: 2024-08-03 14:07:54

Ubuntu用Vim打造Linux程序员编程神器(ctags+cscope+taglist+code_complete)的相关文章

寻人:知名Linux程序员离家出走要去寺庙修行

中国传媒大学动画学院教授.iPhone设计者与开发者孙庆杰(新浪微博 @HoodleMobile )6月1日晚9:48在新浪微博发消息说,著名跨平台自由词典软件星际译王(StarDict)的作者.国内知名的Linux程序员胡正自5月10日离家出走失踪.孙还透露:"胡正母亲说他本次声称要去微软应聘而离家,随后就再联系不上了."这条微博中还贴出了胡正家人的寻人启事. 据胡正个人网站的信息,他生于1983年(农历1982年底),岳阳人.1999年开始学习编程,高中期间开发了个人信息软件&qu

帮助程序员编程时集中注意力的最佳音乐收集

程序员每天面对繁复的代码,双眼紧盯屏幕,指尖在键盘上飞扬,可咱毕竟也不是机器人呐.在轻松愉快的氛围下工作不仅能减轻烦躁的情绪,说不定还能触发灵感,达到事半功倍的效果呢.下面就来看看程序员编程时适不适合听歌,适合听什么歌. 很多人都习惯于一边写代码一边听音乐.至少有两样好处,一是享受音乐,放松身心,二是屏蔽掉周遭环境的噪音(周围人的交谈,人们移动的声音,等等).我也是这样,但还是得看当时的具体工作内容和所处环境. 如果你在办公室办公,且人数超过两人,那我建议你还是戴上耳机听音乐吧.既能避免干扰,又

Linux程序员喜欢的cmd增强版

Linux程序员有时偶尔使用Windows下的cmd工具,会被逼疯的,有些命令ls, cat, ps等已经条件反射一样使用. 但在cmd下,根本不知道该用什么命令,好在盖兹大叔照顾了此部分需求.从Vista开始,推出了PowerShell工具. PowerShell工具不仅完全包含cmd所有功能,特别对于Linux程序员有两大利好: 增强的tab补全命令 Unix常用命令ls, cat, ps等的支持,但是参数格式完全不同,所以不要期望太高. 请注意: 从C:进入D:的某个目录,不需要分两步,直

推荐程序员编程需要知道的网络安全协议方面的书籍

问题描述 求推荐,javaweb程序员编程过程中需要用到的网络协议,通信,安全方面,请求的整个过程方面比较好的书籍,或者资料,博客. 解决方案 解决方案二:白帽子讲web安全

全球程序员编程水平排行榜TOP50,中国排名第一

哪个国家的程序员水平最高?这个容易引发弹幕混战的问题可不好回答.最近软件工程师水平测定平台HackRank发起了一系列编程挑战竞赛,给出了一个目前为止貌似靠谱的统计调查结果. 全球程序员编程水平国家(地区)排行榜TOP50 https://yqfile.alicdn.com/0165338aef0c1602c9a6bc5cac684e2a8888ae7c.png" > 全球数以十万计的软件工程师参加了HackRank的系列编程挑战大赛,比赛项涵盖从Python.算法.网络安全到分布式系统多

程序员编程最常用的8大工具,你用过几个?

对于现在的程序员而言,在编程敲代码必不可缺少就是一些好用的工具. 这些工具不仅仅可以提高编程开发效率,更加高效地完成工作. 下面w3cschool就给小伙伴分享8个颇受程序员好评的必备工具: 0.桌面.效率工具Onenote onenote就像纸质的笔记本.收集资料.知识管理.强悍的复制图像的文字,简直是好用到不怎么需要介绍. 1.阅读/编写代码:Notepad++ 毫不夸张地讲,至少有80.90%的程序员用过这款工具. 如果你没用过,还真得怀疑你是不是程序员. 这款编辑器确实挺好的,支持代码高

程序员编程生涯中常会犯的7个错误

时间久了,我发现很多程序员总是犯着相同的错误,前仆后继,却毫不自知. 下面就是程序员在他们的软件开发生涯中最常犯的7个错误. ▼没有明确的目标 心中没有终点目标,那就只会随波逐流. 如果你想在软件开发的职业生涯上获得成功,那么你需要有一个明确的目标. 仅仅只是对遥远的未来有一个模糊的想法是不够的. 相反,你应该有坚实的目标--在某个时间段内的首要目的--明确定义的目标. 我认识许多程序员和所谓的专业人士庸庸碌碌地在同一个岗位上干了几十年,是的,你没听错,就是几十年! 这是一场悲剧,但如果没有目标

程序员编程从初级到中级的10个秘诀_相关技巧

这个观点很好,有关程序员如何从初级跃升到中级的信息极少.以下是为了实现这种转变需要你去做的10件事. 1.学习另一门语言 其实你学的是哪一门语言并没有关系,但是学习另一门语言(不管你已经了解多少种语言)将把你打造为更好的程序员.能学会一门与你日常使用的语言风格迥异的语言则更佳.打个比方,如果你是C#程序员,学习VB.NET或者Java对你的帮助就没有学习Ruby或者Groovy大. 我说"学另一门语言"的意思是要真正学会它.学习一门语言包括三个领域的知识:语法.内置操作符和库,以及&q

程序员编程工作应该避免的一些坏习惯

良好的编程习惯是每个程序员都应该具备的工作素质,在我的软件生涯中屡屡发现一些程序员的身上总有这样或者那样的坏毛病这些毛病在一些从业时间不是很长的程序员的身上表现的特别突出.1. 搭棚子   搭棚子顾名思义就是拿到一个任务的时候,既不做更详细的需求分析,也不作详细设计,一开始就打开编程工具,噼里啪啦的定义了一堆的模块,我不说是定义类,是因为这样代码里根本就找不到对象,然后就在这些模块的基础上进行工作,结果整个程序看起来就象胡乱搭起来的棚子,虽然有个程序的样子,而且似乎也实现了所要的功能,但是这样的