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的源代码:

http://sourceforge.net/projects/cscope/files/

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

扫描二维码关注公众号,回复: 3338964 查看本文章
 
  1. $ ./configure --with-flex

  2. $ make

  3. $ make install

2.2 生成索引cscope.out

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

 $ find . -name "*.[h|c]" > cscope.files

然后,生成索引文件

$ cscope -bkq -i cscope.files

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

$ cscope -d

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

2.3 配置

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

http://cscope.sourceforge.net/cscope_maps.vim

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

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

 
  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>

<C-\>表示,按Ctrl+\

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

接下来的一串字符就是<C-\>s 定义的命令了

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

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

<span style="font-size:12px;">:help c_CTRL-R</span>

2.4 vim中常用的cscope命令

 
  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的发行版中也已经作为基本的工具存在了, 如果你想自己编译,可以从下面的网址下载源代码。

http://ctags.sourceforge.net/

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

$ ctags -R

但是因为之后vim中的某些插件(omnicppcomplete和echofunc)是基于tag但又对tag有特殊要求,所以在生成tag的时候,我们需要额外的定制。

$ 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插件

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

http://www.vim.org/scripts/script.php?script_id=273

下载下来之后,先将其解压,然后将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文件中设置一下变量

 
  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插件,最新版下载地址如下:

http://www.vim.org/scripts/script.php?script_id=1520

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

 
  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这个可以自动提示函数原型的插件,最先版可以通过以下链接下载:

http://www.vim.org/scripts/script.php?script_id=1735

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

 
  1. let g:EchoFuncKeyNext='<S-n>'

  2. let g:EchoFuncKeyPrev='<S-p>'

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

http://vim.sourceforge.net/scripts/script.php?script_id=159

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

 
  1. let g:miniBufExplMapWindowNavVim = 1

  2. let g:miniBufExplMapWindowNavArrows = 1

  3. let g:miniBufExplMapCTabSwitchBufs = 1

  4. let g:miniBufExplModSelTarget = 1

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

猜你喜欢

转载自blog.csdn.net/wytzsjzly/article/details/82755170
今日推荐