vim + ctags+cscope

1、安装ctags

1) sudo apt-get install ctags

2)生成索引

ctags -R

ctags -R --c++-kinds=+px --fields=+iaS --extra=+q

ctags -R --c-kinds=+px --fields=+iaS --extra=+q

或者  ctags -L -< data.txt

3)设置tags

在vim打开源码时,指定tags文件,才可正常使用,通常手动指定,在vim命令行输入:
:set tags=./tags(当前路径下的tags文件)
若要引用多个不同目录的tags文件,可以用逗号隔开

或者,设置 ~/.vimrc,加入一行,则不用手动设置tags路径:
set tags=~/path/tags

如果经常在不同工程里查阅代码,那么可以在~/.vimrc中添加:
set tags=tags;

set autochdir

4)使用命令

 

设置好了tags文件,在定位变量/函数的定义时,最常用的快捷键是:
Ctrl + ]
跳转到变量或函数的定义处,或者用命令
:ta name
而使用快捷组合键
Ctrl + o/t
返回到跳转前的位置。

另外,ctags不会生成局部变量的索引,不过可以使用gd组合键(对光标所在处的word进行快捷查找定位)来定位,也是相当快捷的。

$ vim -t myAdd
用vim打开文件时,添加参数-t funcName会自动打开定义该函数的文件并定位到定义首行,上面这句就是找到myAdd定义的文件打开并将光标置于定义的第一行处。

:tags
会列出查找/跳转过程(经过的标签列表)


另外,附上vim环境中其他较为好用的快捷键:
* 定位至当前光光标所指单词的下一次出现的地方
# 定位至当前光光标所指单词的上一次出现的地方
n 定位至跳至已被标记出的单词下一次出现的地方
shift+n 定位至跳至已被标记出的单词上一次出现的地方

 

 

 

2.vim-taglist

1)下载

https://sourceforge.net/projects/vim-taglist/?source=typ_redirect

2)然后在~/.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 

3):Tlist命令开关list窗口,CTRL+WW 实现窗口切换

 

"启动vim后自动打开taglist窗口
let Tlist_Auto_Open = 1

"不同时显示多个文件的tag,仅显示一个
let Tlist_Show_One_File = 1

"taglist为最后一个窗口时,退出vim
let Tlist_Exit_OnlyWindow = 1

"taglist窗口显示在右侧,缺省为左侧
let Tlist_Use_Right_Window =1

"设置taglist窗口大小
"let Tlist_WinHeight = 100
let Tlist_WinWidth = 40

"设置taglist打开关闭的快捷键F8
noremap <F8> :TlistToggle<CR>

"更新ctags标签文件快捷键设置
noremap <F6> :!ctags -R<CR>

 

 

 

 

 

 

3.cscope

1) sudo apt-get install cscope

2)先找出你关心的头文件和.c文件。Linux中使用是GNU find命令,默认是递归查询的,所以找文件很简单

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

//cscope -bkq -i cscope.files

以绝对路径生成,不用绝对路径,容易出现cscope find之后,选择num后报错找不到文件。

 

  1. find `pwd` -name "*.[ch]" -o -name "*.cpp" > cscope.files  
  2. cscope -bR -i cscope.files

 

3)

 

add :增加一个新的cscope数据库/链接库

              使用方法:

                     :cs add {file|dir} [pre-path] [flags]

              其中:

                     [pre-path] 就是以-p选项传递给cscope的文件路径,是以相对路径表示的文件

前加上的path,这样你不要切换到你数据库文件所在的目录也可以使用它了。

                     [flags] 你想传递给cscope的额外旗标

              实例:

                     :cscope add /root/code/vimtest/ftpd

或者直接在 ~/.vimrc 里添加一行

:cs add /home/username/C/demo_code/cscope.out

 

4)

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中特殊寄存器的信息。

:help c_CTRL-R

 

5) 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 ---- 查找包含本文件的文 

 

6)cscope.sh

#!/bin/bash
dir=`pwd`
src_dirs=$dir
#src_dirs+=\ $dir/drivers/soc/
echo $src_dirs
find $src_dirs -name  "*.[h|c]" > cscope.files
cscope -bkq -i cscope.files
#cscope add $dir/cscope.out
ctags -R

ctags -L -< data.txt

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值