Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1065883
  • 博文数量: 573
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 66
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-28 16:21
文章分类

全部博文(573)

文章存档

2018年(3)

2016年(48)

2015年(522)

分类: LINUX

2015-12-07 15:42:57

 

vim+cscope+ctags打造属于自己的IDE

      

所谓工欲善其事,必先利其器。作为专业码农,特别是长期在Unix系统上展开工作(查看源代码、coding)的码农,没有一个极致的IDE环境,工作效率会很受影响的。当然啥时候Unix系统如果有Visual Studio这样牛X的IDE,相信很多人会很开心。但生活是残酷的,我们总得自己丰衣足食,下面介绍一下,我在Ubuntu上使用vim+cscope+ctags搭建的IDE。

介绍之前,先上个效果图吧,如果不是你想要的,可以忽略本文的以下内容。


1. vim的安装及配置

默认情况下,vim工具已经作为标配的编辑工具集成在unix/linux的各个发行版本中。如果你的系统上没有,你可以从官网上下载源代码自己编译。

2. cscope的安装及配置

2.1 安装

如果你的系统没有安装cscope,可以通过以下链接下载到最新版本的cscope的源代码:

解压之后,通过以下命令安装:


[html] view plaincopy
  1. $ ./configure --with-flex  
  2. $ make  
  3. $ make install  

2.2 生成索引cscope.out

先找出你关心的头文件和.c文件,我是在linux的根目录下执行find来找出所有的.h和.c文件。Linux中使用是GNU find命令,默认是递归查询的,所以找文件很简单。不像solaris中的find命令需要使用一些trick来实现递归查找。

[html] view plaincopy
  1. $ find . -name "*.[h|c]" > cscope.files  


然后,生成索引文件

[html] view plaincopy
  1. $ cscope -bkq -i cscope.files  


等命令结束后,你会发现根目录下生成了一个名为cscope.out的文件。此时,你就可以独立使用cscope来浏览代码了,执行Ctrl-d可以退出cscope。
[html] view plaincopy
  1. $ cscope -d  


但是,我们的目的是要在vim中使用cscope,这需要进一步在vim的配置文件中加入关于cscope的配置了。

2.3 配置

如果你不想配置cscope,可以下载cscope_maps.vim(下载地址如下),并加入到vim的plugin目录中。


我没有直接使用上面的配置,而是从中选取了我需要的配置,然后加入到.vimrc文件中。

有时候懒造就我们创造一些新的东西,比如,我们不想每次都输入cscope的命令,可以通过定义一下快捷键:

[html] view plaincopy
  1. nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR>  
  2. nmap <C-\>g :cs find g <C-R>=expand("<cword>")<CR><CR>  
  3. nmap <C-\>c :cs find c <C-R>=expand("<cword>")<CR><CR>  
  4. nmap <C-\>d :cs find d <C-R>=expand("<cword>")<CR><CR>  

表示,按Ctrl+\

s表示,按s,当然是在松开Ctrl+\之后

接下来的一串字符就是s 定义的命令了

”:cs find s“ 表示输入的cscope命令

=expand("")实际上是两部分,=表示插入‘=’寄存器的值,expand("")表示返回当前光标的函数名或变量名。整体来说就是插入光标下的字符串到cscope命令中。你可以通过以下命令获取更多关于以及vim中特殊寄存器的信息。


[html] view plaincopy
  1. <span style="font-size:12px;">:help c_CTRL-Rspan>  

2.4 vim中常用的cscope命令

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

3 ctags 的安装与配置

ctags在linux的发行版中也已经作为基本的工具存在了, 如果你想自己编译,可以从下面的网址下载源代码。

安装完成后, 就是使用ctags为源码生成tag了。因为linux中ctags是GNU版本的,所以支持递归访问文件,这使得生成tag非常容易,只需在源码根目录下执行下面的命令。

[html] view plaincopy
  1. $ ctags -R  
但是因为之后vim中的某些插件(omnicppcomplete和echofunc)是基于tag但又对tag有特殊要求,所以在生成tag的时候,我们需要额外的定制。
[html] view plaincopy
  1. $ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .  
这里,--c++-kinds=+ps是为c/c+语言添加函数原型信息。--fields=+iaS是为标签添加继承信息(inheritance),访问控制信息(access)和函数特征(Signature)如参数表或原型等。--extra=+q是为类成员添加标签。


4 在vim中添加taglist, omnicppcomplete, echofunc, minibufferexplorer等插件

4.1 在vim中加入taglist插件

可以从这里下载最新的插件

下载下来之后,先将其解压,然后将taglist.vim拷贝到~/.vim/plugin/下,把taglist.txt拷贝到~/.vim/doc/目录下,即完成安装

$ unzip -d taglist-46 taglist_46.zip 
Archive:  taglist_46.zip
  inflating: taglist-46/plugin/taglist.vim  
  inflating: taglist-46/doc/taglist.txt

然后在~/.vimrc文件中设置一下变量

[html] view plaincopy
  1. set tags=tags   ------- 设置tags的存放目录  
  2. let Tlist_Show_One_File=1   -------只允许taglist显示一个文件的信息  
  3. let Tlist_Exit_onlyWindow=1   ---------当显示taglist信息的窗口是最后一个时,退出vim  
  4. let Tlist_Process_File_Always=1    -----时时更新taglist  


4.2 在vim中加入omnicppcomplete插件,最新版下载地址如下:

我对该插件的理解是,它主要用于补全结构体的成员以及类成员,并在一个窗口中对你选中的对象有一些解释,好像没有函数的补全功能。它的安装非常简单,只需要在~/.vim目录下解开压缩包即可(当然这里我指的是linux平台下,关于windows平台,请具体参加omnicppcomplete的说明文档),解压后,你会在.vim目录下找到一下文件:

[html] view plaincopy
  1. after\ftplugin\cpp.vim  
  2. after\ftplugin\c.vim  
  3.   
  4. autoload\omni\common\debug.vim  
  5.                     \utils.vim  
  6.   
  7. autoload\omni\cpp\complete.vim  
  8.                  \includes.vim  
  9.                  \items.vim  
  10.                  \maycomplete.vim  
  11.                  \namespaces.vim  
  12.                  \settings.vim  
  13.                  \tokenizer.vim  
  14.                  \utils.vim  
  15.   
  16. doc\omnicppcomplete.txt  

然后,打开vim,输入:help omnicppcomplete,如果有输出就说明安装成功了。默认情况下,我们不许用做任何配置,如果你想自定义,请参考它的说明文档。


4.3 在vim中加入echofunc这个可以自动提示函数原型的插件,最先版可以通过以下链接下载:

该插件主要是解决omnicppcomplete不能补全函数的问题,基本上也不用配置,主要是在.vimrc中定义两个快捷键来切换函数的不同定义。

[html] view plaincopy
  1. let g:EchoFuncKeyNext=''  
  2. let g:EchoFuncKeyPrev=''  


4.4 在vim中加入minibufexpl.vim插件,该插件主要提高管理buffer window的使用性,插件的下载地址是

将下载的插件放在~/.vim/plugin/目录后,就可以直接使用,也可以在.vimrc文件中打开一些功能设置

[html] view plaincopy
  1. let g:miniBufExplMapWindowNavVim = 1  
  2. let g:miniBufExplMapWindowNavArrows = 1  
  3. let g:miniBufExplMapCTabSwitchBufs = 1  
  4. let g:miniBufExplModSelTarget = 1  


至此,已经基于vim,ctags,cscope的IDE环境基本已经配置好了。

阅读(632) | 评论(0) | 转发(0) |
0

上一篇:史上最全的Vim命令

下一篇:vim列编辑模式

给主人留下些什么吧!~~