Vim编程之:tags,cscope,taglist

简介:

最近VIM用得比较多,所以在学了不少。在这里对收获到的东西做一个总结。

1.编程四要素vim,ctags,cscope,taglist

vim配合这3件东西之后,极为强大。与SourceInsight有一拼。

1.1 ctags

ctags叫作“标签”,它记录源码中所有标识符定义所在的文件与行号。

(1)安装

先在命令终端运行一下:


$ ctags --version

看一下当前系统有有没有安装ctags,如果有就跳过本节。

我是在http://ctags.sourceforge.net/上下载的最近的源码,解压,配置,编译,安装。 


$ tar zxvf ctags-5.8.tar.gz
$ cd ctags-5.8
$ ./configure && make
...
$ sudo make install

然后再检查一下是否成功安装 


$ ctags --version

通常是没问题的。

(2)使用

在咱们的源码目录下执行简单的


$ ctags -R .

ctags就会遍历当前目录下的所有.c,.h,.cpp文件,提取所有的标识符并记录到tags文件中。

进入vim可又使用标签参数,使vim打开时跳到标签所在位置。如果我们要找WinMain,如下:


$ vi -t WinMain

进行vim之后,常用的几个命令:

  • :tag {ident}    "跳转到ident标签位置上
  • :tags    "显示标签栈
  • :ts    "显示找到的所有标签
  • :tp    "显示上一个标签
  • :tn    "显示下一个标签

快捷键:

  • Ctrl+t    "返回原来的文件
  • Ctrl+]    "跳至下一个标签

 

1.2 cscope

cscope比ctags更强大,它不仅记录标识符定义所在的位置,还记录了标识符(函数)之间的调用关系与文件的包含关系,功能更多。只不过没ctags使用简单。

(1)安装

同样先检查一下cscope有没有安装。

如果没有安装就从网上下载源码进行安装。下载地址:http://cscope.sourceforge.net/

同样步骤:解压,配置,编译,安装。与ctags一样。

(2)使用

与ctags类似,首先得生成一个cscope.out文件。这个文件与tags文件功能类似,但比较复杂。 


$ find . -name "*.h" -o -name "*.c" -o -name "*.cpp" > cscope.files
$ cscope -bkq -i cscope.files
$ rm cscope.files

cscope就会生成一个cscope.out文件。

然后在当前的目录下打开vim。在vim在执行命令将cscope.out加进来: 


: cs add cscope.out

好了,现在cscope就可又用了。

常用的搜索命令格式: 


: cs find {querytype} {ident}
或
: cs f {querytype} {ident}

其中{querytype}表示:

num querytype  function descript
 0  s  C符号出现过的地方
 1  g  定义的地方
 2  d  被这个函数调用的函数列表
 3  c  调用这个函数的函数列表
 4  t  搜字串
 6  e  egrep匹配
 7  f  搜索文件
 8  i  包含这个文件的文件列表


通常我们会在~/.vimrc文件中进行一下按键映射,使操作便简便: 


nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>
或
nmap <C-@>s :cs find s <C-R><C-W><CR>

其实的依此类推: 


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" cscope setting
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
  set csprg=/usr/bin/cscope
  set csto=1
  set cst
  set nocsverb
  " add any database in current directory
  if filereadable("cscope.out")
      cs add cscope.out
  endif
  set csverb
endif
 
nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>

 其中 <C-@>s 表示 [Ctrl+空格] 后再按 s 键。

(3)遇到的问题

我的安装使用没有上面说的那么顺。使用的时候,我执行
:cs add cscope.out
显示:
E319: Sorry, the command is not available in this version.
最后出的原因是编译的时候没有加入cscope模块。

执行vim命令查看: 


$ vim --version | grep cscope
 ... -cscope ...

cscope前是减号,说明当前vim里没有加入这个模块。

找到vim的源码包,进入源码路译。 


$ ./configure --help | grep cscope
  --enable-cscope    Include cscope interface

说明如果要在vim中使用cscope,就得在配置的时候加入--enable-cscope参数。如下: 


$ ./configure --enable-cscope && make

编译完了之后,先别急着安装,检查一下新编译的vim可执行文件是否具有cscope功能。 


$ .src/vim --version | grep cscope
... +cscope ...

如果看到cscope前面是个加号,就表示有cscope功能。

然后才是安装:


$ sudo make install

安装完了之后,还要检查一下vi有没有更新。经常有网友问为什么加了--enable-cscope编译安装还是不行呢?原因是,你安装的是vim,而vi在某些系统里是另一个独立的程序,vi不会自动更新。

将原来的vi链接为新安装的vim 


$ vi_path=`which vi`
$ sudo rm $vi_path
$ sudo ln -s `which vim` $vi_path

OK,我们再来检验一下vi是否还有cscope功能。


$ vi --version | grep cscope
 ... +cscope ...

如上就对了!

1.3 taglist

上面讲了ctags与cscope,如果你把上面两样用熟了,vim是很强大的。

taglist是一个插件,它可又显示光标所在文件的文件结构,包括函数、类、宏定义等等。不多说,这个插件在网上有下载:http://www.vim.org/scripts/script.php?script_id=273

下载后,解压到~/.vim目录下。其实里面就只有两个件:

  • plugin/taglist.vim - main taglist plugin file 
  • doc/taglist.txt    - documentation (help) file

具体怎么做,上面那个网页写的很清楚了。

 

2.关于~/.vimrc文件

2.1简介

其实我在系统上一安装好vim后,就会立即到网上去下载一个.vimrc启动配置文件。以下是我之前收藏共享的通过模板(不是我写的,我只根据我的习惯改):http://www.oschina.net/code/snippet_243525_20881

2.2使用

大家可又去下载,覆盖~/.vimrc即可。

在我共享的这个~/.vimrc中,已经包括了基本的缩进、颜色、Tab宽以及对ctags, cscope, taglist 等组件的配置。这里我例举几个里面已提供的功能。

(1)缓冲切换

  • Ctrl+J    下一个文件
  • Ctrl+K    上一个文件
  • Ctrl+H    第一个文件

 

(2)Ctags与Cscope更新

  • F12        更新当前目录下的ctags与cscope

 

(3)Cscope查询

  • Ctrl+<空格>+g    查找标识符的定义
  • Ctrl+<空格>+s    查找标识符出现的地方
  • Ctrl+<空格>+d    查找标识符调用的函数
  • ...

 

(4)taglist

  • \t    显示taglist

 

建议大家自己去学习这个文件的内容。 


 

 

目录
相关文章
|
6月前
|
NoSQL Linux Shell
Linux下的系统编程——vim/gcc编辑(二)
Linux下的系统编程——vim/gcc编辑(二)
67 0
Linux下的系统编程——vim/gcc编辑(二)
|
6月前
|
Linux 开发工具
Linux的基础编程——vi/vim编辑器(六)
Linux的基础编程——vi/vim编辑器(六)
67 0
Linux的基础编程——vi/vim编辑器(六)
|
6月前
|
人工智能 Linux 开发工具
【Linux系统编程】开发工具yum和vim--2
【Linux系统编程】开发工具yum和vim--2
|
6月前
|
缓存 Ubuntu Linux
【Linux系统编程】开发工具yum和vim--1
【Linux系统编程】开发工具yum和vim--1
|
开发工具 iOS开发
iOS 逆向编程(十一)iPhone 终端支持中文输入与vim命令(编辑文件)
iOS 逆向编程(十一)iPhone 终端支持中文输入与vim命令(编辑文件)
100 0
|
人工智能 运维 Shell
大话Linux——Vim编辑器与Shell编程
## 4、Vim编辑器与Shell命令脚本 4.1、Vim文本编辑器 Vim编辑器的三种模式及切换方法 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等 输入模式:正常文本录入 保存或退出我能当,以及设置编译环境
523 0
|
IDE Linux Shell
Linux系统编程 (二)linux下vim的常用命令
Linux系统编程 (二)linux下vim的常用命令
302 0
Linux系统编程 (二)linux下vim的常用命令
|
NoSQL IDE Linux
Linux系统编程—第二节—(Centos 7)开发工具等(yum vim gcc g++ gdb make Makefile )
会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
311 0
Linux系统编程—第二节—(Centos 7)开发工具等(yum vim gcc g++ gdb make Makefile )
|
机器学习/深度学习 NoSQL IDE
linux编程必备(yum vim gcc g++ gdb makefile)
linux编程必备(yum vim gcc g++ gdb makefile)
linux编程必备(yum vim gcc g++ gdb makefile)
|
NoSQL 数据库 开发工具
vim+cscope使用指南
vim+cscope使用指南
10313 2