手把手教你将vim配置成一个C/C++的超级IDE

转自:

http://paul.xhblog.com/archives/2008/322824.shtml

在没有怎么太深的接触vi/vim之前,也曾经搞不懂为什么有好多linux下的程序员说vi/vim是个超级的代码编辑器或者编译器,也有不少的 (我认 为是刚在linux编程不久的人)说,“。。头让门挤啦,有那么多功能强大的linux环境下的IDE不用,竟然就用个简单的vi/vim,不用说界面类 似DOS,连编译都要用命令。。”。。等等类似的评价吧。
      我开始也不懂它到底哪强大,但我仍坚持使用vim可以说是据以两点原因:
      1、既然有那么多的前辈说它强大,那么就必定有他的道理 
      2、我规定自己以后的发展方向是 The Embedded System on Linux,所以,在嵌入式硬件平台资源很有限的情况下,使用耗资大的IDE有点不现实,但是vi/vim却非常适合应用在这种硬件平台上。
      好了,其实我现在也是个linux下编程的新手,但我坚信我选择用vi/vim是正确的。
      下面我们就在Ubuntu7.10下用vi/vim搭建c/c++的编程环境,至于到底超不超级的,相信大家自有评价   ^.^
注:本文主要参考和引用了 吴垠 的文章《手把手交你把Vim改装成一个IDE编程环境》, 地址:http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx

如果涉及到版权问题,请通知我,我会及时处理 ^.^      不过该文章主要是用gvim在RedHat上搭建的,考虑到在嵌入式系统的硬件平台可能用不了gvim,故采用纯粹的vi/vim,而且主机环境为 Ubuntu7.10,这样,一些文件的安装路径可能和RedHat的有所区别,请读者自己注意吧 :)

      本文已经假设你已经升级到了完整版的Vim7.1.56,而且已经安装了如gcc和g++等必须的编译器。

1、Vi/Vim中文帮助手册的安装。

       a、 下载帮助中文包http://vcd.gro.clinux.org/-》UN*X打包文件,我下到的是vimcdoc-1.6.0.tar.gz,解压后,进入到该解压后的文件夹vimcdoc-1.6.0,执行命令
      $ sudo ./vimcdoc.sh -i            //对中文帮助文件进行安装,详细可参考文件“INSTALL” 
      安装完成后, 在终端打开vi/vim,输入命令":help",即可看到,显示的帮助文件已经为中文了。
      b、vim编程常用命令():
       建议先看看帮助手册中的下面章节, 其中有关tags文件的部分你可以先跳过, 在后面的章节中会讲到, 到时候你在回来看看, 就觉得很简单了:
      :help usr_29
      :help usr_30
       下面是我常用的一些命令, 放在这里供我备忘:

% 跳转到配对的括号去
[[ 跳转到代码块的开头去(但要求代码块中'{'必须单独占一行)
gD 跳转到局部变量的定义处
'' 跳转到光标上次停靠的地方, 是两个', 而不是一个"
mx 设置书签,x只能是a-z的26个字母
`x 跳转到书签处("`"是1左边的键)
> 增加缩进,"x>"表示增加以下x行的缩进
< 减少缩进,"x<"表示减少以下x行的缩进


    2、语法高亮显示:

       编辑配置文件:$ sudo vi /etc/vim/vimrc ,取消掉“syntax on”的注释,就可以开启代码编辑时的语法高亮显示了,并增加设置“colorscheme murphy" ,其中murphy是配色方案, 所有的配色方案保存在目录“/usr/share/vim/vim71/colors”里,以“.vim”为结尾的文件。如果这里面没有你喜欢的主题,则 在vim.org上一定会有符合你胃口的主题。
       更炫的语法高亮:(
       你可能会发现很多东西没有高亮起来, 比如运算符号, 各种括号, 函数名, 自定义类型等, 但是看上面的图片, 我的运算符号和函数名都加亮了^_^, 想知道为什么吗? 哇哈哈哈哈.... 让我来教你吧 ...
      主要的思路是新建一个语法文件, 在文件中定义你要高亮的东东, 想高亮什么就高亮什么, 用vim就是这么自信. 所谓的语法文件就是vim用来高亮各种源文件的一个脚本, vim靠这个脚本的描述来使文件中的不同文本显示不同的颜色, 比如C语言的语法文件放在类似于这样的一个路径中: /usr/share/vim/vim71/syntax,在其中加入

"======================================================== " Highlight All "======================================================== syn match c "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2 syn match c "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1 hi c gui=NONE guifg=#B5A1FF "======================================================== " Highlight All Math Operator "======================================================== " C math operators syn match cMathOperator display "[-+\*/%=]" " C pointer operators syn match cPointerOperator display "->\|\." " C logical operators - boolean results syn match cLogicalOperator display "[!<>]=\=" syn match cLogicalOperator display "==" " C bit operators syn match cBinaryOperator display "\(&\||\|\^\|<<\|>>\)=\=" syn match cBinaryOperator display "\~" syn match cBinaryOperatorError display "\~=" " More C logical operators - highlight in preference to binary syn match cLogicalOperator display "&&\|||" syn match cLogicalOperatorError display "\(&&\|||\)=" " Math Operator hi cMathOperator guifg=#3EFFE2 hi cPointerOperator guifg=#3EFFE2 hi cLogicalOperator guifg=#3EFFE2 hi cBinaryOperator guifg=#3EFFE2 hi cBinaryOperatorError guifg=#3EFFE2 hi cLogicalOperator guifg=#3EFFE2 hi cLogicalOperatorError guifg=#3EFFE2 "=============================================================================


      再打开你的C文件看看, 是不是又明亮了许多. 还有一个压箱底的要告诉你, 如果你自己增加了一个类型或者结构之类的, 怎么让
它也象"int", "void"这样高亮起来呢? 再在上面的文件添加如下的设置:
"========================================================
" My Own DataType
"========================================================
syn keyword cType       My_Type_1 My_Type_2 My_Type_3

      3、在程序中跳来跳去:Ctags的使用
      你在读程序时看了一个函数调用, 或者一个变量, 或者一个宏等等, 你想知道它们的定义在哪儿, 怎么办呢?就用Ctag来实现这个功能:
      到http://ctags.sourceforge.net/下载,解压后顺序执行“./configure”、“make”、“make install”即可完成安装。
     
然后去你的源码目录, 如果你的源码是多层的目录, 就去最上层的目录, 在该目录下运行命令ctags -R,现在以我的
~/download/anjuta-2.4.0/src/为例,

$ cd ~/download/anjuta-2.4.0/
$ ctags -R
此时在~/download/anjuta-2.4.0/目录下会生成一个 tags 文件, 现在用vim打开~/download/anjuta-2.4.0/src/main.c           

再在vim中运行命令:

:set tags=~/download/anjuta-2.4.0/tags

该命令将tags文件加入到vim中来, 你也可以将这句话放到vimrc中去, 如果你经常在这个工程编程的话.

此时,将鼠标移到一个变量上后,按下Ctrl+],便会自动跳转到该变量的定义处,再按下Ctrl+T,便会返回到原来处。
使用对象为变量, 结构, 宏, 等等, 都可以的, 赶快试试吧.....
此时在回头学习一下第3节中说的vim手册吧
:help usr_29


不过还有一个小瑕疵, 你修改程序后, 比如增加了函数定义, 删除了变量定义, tags文件不能自动rebuild, 你必须手动再运行一下命令:

$ ctags -R

使tags文件更新一下, 不过让人感到欣慰的是vim不用重新启动, 正在编写的程序也不用退出, 马上就可以又正确使用<C-]>和<C-T>了.



4、教你高效的浏览源码--插件:Taglist
下载地址 http://www.vim.org/s/.php?_id=273
版本 4.5
下载完成并解压缩后,将相应的插件和doc复制到vim目录:

h-jingbo@Ubuntu:/usr/share/vim/vim71$ sudo cp /home/h-jingbo/download/plugin/taglist.vim plugin/

h-jingbo@Ubuntu:/usr/share/vim/vim71$ sudo cp /home/h-jingbo/download/doc/taglist.txt doc/

        由于以前已经安装过了中文的help文件,所以在vi中输入命令 :help taglist.txt是会提示找不到该帮助文件,可能是由于已经更改了vim的帮助文件的路径了吧,这就不详细研究了。
        为了显示Tlist的窗口的关闭于打开合适些,在文件 /etc/vim/vimrc 配置文件中加入下列的设置:

let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1

       用vim打开一个程序代码后,执行命令 : Tlist,即可看到形如下面的界面:

500)this.width=500;">

        其中,左面的窗口为运行Tlist形成的窗口,右边为该文件的源代码,在不同的窗口间,可以用Ctrl+两次W进行切换,TagList窗口, 其中列出了main.c文件中的tag, 并且按照"typedef", "variable", ""等进行了分类. 将光标移到左侧的如图所示的变量, 按下回车后, 源程序会自动跳转到该变量的定义处,这就是TagList最基本也是最常用的操作. 再教你一个常用的操作, 你在浏览TagList窗口时, 如果还不想让源码跳转, 但是想看看tag在源码中完整的表达, 可以将光标移到你想要看的tag上, 然后按下空格键, 在下面的命令栏中, 如图下边含“=0”字样的方框, 会显示该tag在源码中完整的写法, 而不会跳转到源码处.
       TagList插件我就介绍到这里, 其实它还有很多用法和设置, 我没法一一地教你了, 好在TagList有一份详细的帮助手册 taglist.txt, 有时间好好钻研下吧 : )

       5、文件浏览和窗口管理器--插件:WinManager
下载地址 http://www.vim.org/s/.php?_id=95
版本 2.x
手册 :help winmanager

       当我们打开vi,执行命令 “:e ~/download/anjuta-2.4.0/src/”时,可以看到如下的画面,

500)this.width=500;">

     可以发现,会显示我的路径“~/download/anjuta-2.4.0/src/”下的文件目录,这个功能就是由vi默认的以安装的插件netrw.vim实现的,
在该界面上你可以用下面的一些命令来进行常用的目录和文件操作:

<F1> 显示帮助
<cr> 如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件
- 返回上级目录
c 切换vim 当前工作目录正在浏览的目录
d 创建目录
D 删除目录或文件
i 切换显示方式
R 文件或目录重命名
s 选择排序方式
x 定制浏览方式, 使用你指定的程序打开该文件


         我这里不是教你怎么用netrw.vim插件, 而是要教你通过WinManager插件来将TagList窗口和netrw窗口整合起来,在文件/etc/vim/vimrc中加入下面的两句配置:

let g:winManagerWindowLayout='FileExplorer|TagList'
nmap wm :WMToggle<cr>

我打开~/download/anjuta-2.4.0/src/目录下的main.c的源文件,在normal状态下输入"wm",可以看到如下:

500)this.width=500;">

           其中左上边是netrw窗口, 左下边是TagList窗口, 当再次输入"wm"命令时这两个窗口又关闭了.

         WinManager的功能主要就是我介绍的这些, 但是它还有其他一些高级功能, 还可以支持其他几个插件, 如果你觉得我介绍的还不够你用, 建议你把它的帮助手册好好研究一下,就是插件压缩包中doc里的文件。

  6、Cscope的使用:

       这下更厉害了, 用Cscope自己的话说 - "你可以把它当做是超过频的ctags", 其功能和强大程度可见一斑吧, 关于它的介绍我就不详细说了, 如果你安装好了前文介绍的中文帮助手册, 用下面的命令看看介绍吧:

:help if_cscop.txt

      我在这里简单摘抄一点, 供还在犹豫的朋友看看:
Cscope 是一个交互式的屏幕下使用的工具,用来帮助你:
* 无须在厚厚的程序清单中翻来翻去就可以认识一个 C 程序的工作原理。
* 无须熟悉整个程序就可以知道清楚程序 bug 所要修改的代码位置。
* 检查提议的改动 (如添加一个枚举值) 可能会产生的效果。
* 验证所有的源文件都已经作了需要的修改;例如给某一个现存的函数添加一个参数。
* 在所有相关的源文件中对一个全局变量改名。
* 在所有相关的位置将一个常数改为一个预处理符号。

它被设计用来回答以下的问题:
* 什么地方用到了这个符号?
* 这是在什么地方定义的?
* 这个变量在哪里被赋值?
* 这个全局符号的定义在哪里?
* 这个函数在源文件中的哪个地方?
* 哪些函数调用了这个函数?
* 这个函数调用了哪些函数?
* 信息 "out of space" 从哪来?
* 这个源文件在整个目录结构中处于什么位置?
* 哪些文件包含这个头文件?

下载地址 http://cscope.sourceforge.net
版本 15.x

     安装和往常一样,解压-》“./configure”“make”“make install”,这些都需要root权限。
在/etc/vim/vimrc增加以下设置:

:set cscopequickfix=s-,c-,d-,i-,t-,e-    

这个是设定是否使用 quickfix 窗口来显示 cscope 结果, 用法在后面会说到。
跟Ctags一样, 要使用其功能必须先为你的代码生成一个cscope的数据库, 比如我的项目在“~/download/anjuta-2.4.0”,则在该目录下运行下面的命令:

$ sudo cscope -Rbq
# 此后会生成三个文件
$ ls -l cscope.*
-rw-r--r-- 1 root root 1318912 2008-03-26 21:18 cscope.in.out
-rw-r--r-- 1 root root 7843983 2008-03-26 21:18 cscope.out
-rw-r--r-- 1 root root 5553000 2008-03-26 21:18 cscope.po.out
# 打开文件, 开始Coding
$ cd src
$ vi main.c

进入vim后第一件事是要把刚才生成的cscope文件导入到vim中来, 用下面的命令:

:cs add ~/download/anjuta-2.4.0/cscope.out ~/download/anjuta-2.4.0

上面这条命令很重要, 必须写全, 不能只写前半句:
:cs add ~/download/anjuta-2.4.0/cscope.out
因为源码是多级目录的, 如果这样写, cscope是无法在子目录中的源码中工作的, 当然, 如果你的源码都在同一级目录中就无所谓了. 如果你要经常用cscope的话, 可以把上面那句加到vimrc中去.
下面我们来操练一下, 查找函数vim_strsave()的定义, 用命令:

:cs find g get_real_path

如下图:

500)this.width=500;">

按下回车后会自动跳转到get_real_path()的定义处. 此时你肯定会说Ctags也可以做到这个呀, 那么下面说的这个Ctags就无法做到了, 我想查找get_real_path()到底在那些地方被调用过了, 用命令:

:cs find c get_real_path

按下回车后vim会自动跳转到第一个符合要求的地方, 并且在命令栏显示有多少符合要求的结果, 如图:

500)this.width=500;">

如果自动跳转的位置你不满意, 想看其他的结果, 可以用下面的命令打开QuickFix窗口:

:cw

如图:

500)this.width=500;">

这时你就可以慢慢挑选了^_^(当然,这里只有一处调用了。。。举例不当,哈哈)

原文地址:https://www.cnblogs.com/VortexPiggy/p/2517655.html