vim+ctags+cscope安装与使用总结(不断补充中)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/luckywang1103/article/details/44181557

ctags


1、安装ctags

1) sudo apt-get install ctags  或者

2) 在http://ctags.sourceforge.net/ 下载源代码包之后,解压缩生成源代码目录

进入源代码目录执行./configure & make & make install


2、vim中ctags简单使用

详细的使用ctags用法,在vim中使用:help tags

1)生成tags文件

在源码根目录下执行ctags -R命令来为程序源代码生成标签文件,其-R选项表示递归操作,同时为子目录也生成标签文件,vim利用生成的标签文件,可以进行检索,并在不同的文件、元素之间来回切换。

也可以用ctags file_name1.c filename2.c filename3.h来产生ctags文件或者ctags *.c *.h


在创建ctags的时候排除某些目录

ctags -R --exclude=pattern

ctags -R --exclude=hifi4_framework/*

2)字段补全

为了使得字段补全有效,在生成tags时需要一些额外的参数,推荐的c++参数主要是:
ctags -R --c++-kinds=+px --fields=+iaS --extra=+q
其中:
选项c++-kinds 用于指定C++语言的 tags记录类型,  --c-kinds用于指定c语言的,  通用格式是  --{language}-kinds
选项 fileds 用于指定每条标记的扩展字段域
extra 选项用于增加额外的条目:   f表示为每个文件增加一个条目,  q为每个类增加一个条目


3)指定tags文件位置

可以手动指定tags文件

a)在vim命令行中输入或者修改.vimrc文件 set tags=./tags(当前路径下的tags文件)

如果要引用多个不同目录的tags文件,可以用逗号隔开,set tags=path1, path2...,或者

set tags+=path

set tags+=path

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

set tags=tags;

set autochdir

第一个命令里的分号是必不可少的,这个命令让vim首先在当前目录里寻找tags文件,如果没有找到tags文件,就到父目录中查找,一直向上递归。因为tags文件中记录的路径总是相对于tags文件所在的路径,所以要使用第二个设置项来改变vim的当前目录。


4)跳转到指定函数

在变量或函数处 ctrl+] 来跳转到变量或者函数定义的地方。ctrl+t返回到跳转前的位置。

或者使用命令:tag func_nameshi 来跳转到变量或者函数定义的地方。

ctags不会生成局部变量的索引。

:tags会列出查找/跳转过程


3、ctags的局限性

tags文件只能查看函数,类或变量的定义,而没有被调用信息。

如果要知道一个函数在什么地方被使用,需要使用cscope工具。

添加的tags最好是source code的索引,对于include头文件索引没有效果,




taglist


taglist插件是以vim脚本的形式存在,因此只需要将其下载下来放到相应的目录即可。

taglist基于ctags才能发挥作用,因此要确保安装了ctags。

通过在vim命令行下运行help taglist.txt查询taglist的用法。

其英文原版手册:http://vim-taglist.sourceforge.net/manual.html


1、安装taglist

1)从http://vim-taglist.sourceforge.net/index.html 下载taglist安装包。

2)进入~/.vim目录,将taglist安装包解压,将解压后的/doc和/plugin目录复制到.vim目录下

3)进入~/.vim/doc目录,在vim下运行helptag .命令。这个步骤是将doc下的帮助文档加入到vim的帮助主题中,这样我们就可以通过在vim中运行help taglist.txt查看taglist帮助。

4)打开配置文件~/.vimrc,加入以下两行:

       let Tlist_Show_One_File=1
       let Tlist_Exit_OnlyWindow=1

到此安装已经完成。

在vim命令行下运行:Tlist(:TlistOpen, :TlistToggle)打开Taglist窗口,

运行:Tlist(:TlistClose, :TlistToggle)关闭Taglist窗口,


我们可以通过ctrl+w快捷键或者鼠标点击在Taglist窗口和编辑区之间切换焦点,在Taglist窗口用鼠标选择某个符号并点击或者用键盘选择某个符号并回车,就可以跳转到该符号定义的位置。


2、其他一些选项可在~/.vimrc脚本中添加。如:

"设置ctags路径
let Tlist_Ctags_Cmd = '/usr/bin/ctags'

"启动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>




NERDTree


1、下载地址:http://www.vim.org/scripts/script.php?script_id=1658

2、解压得到doc/,nerdtree_plugin/,plugin/,syntax/

将后面3个文件夹的xxx.vim结尾的插件复制到./vim/plugin/目录下,并chmod a+x权限,

将doc/目录下的NERD_tree.txt复制到./vim/doc目录下并在当前目录下执行vim,在vim命令行中:helptags .,这样以后就能在vim中通过:help NERD_tree.txt来查看对应的帮助文档。

现在已经可以通过:NERDTreeToggle来在vim中显示文件列表,只不过现在文件列表栏显示在左边,需要修改配置。

3、配置

在./vimrc内容中添加

let NERDTreeWinPos='right'

noremap <F9> :NERDTreeToggle<CR>

这样以后在vim中直接按F9就能在右边显示文件列表栏了。

4、知识

现在NERDTree好像不支持搜索文件的功能,只能一个一个找,如果要使vim支持搜索文件还要装对应的插件。




cscope


1、安装cscope

sudo apt-get install cscope


2、知识点

1) 生成索引文件cscope -Rbq则生成cscope.in.out cscope.out cscope.po.out三个文件

1) :cs add path/cscope.out 添加索引文件的位置

2)

:cs find c function  查看function被调用的位置

:cs find s 查找本c符号

:cs find g 查找本定义

:cs find d 查找本函数调用的函数

:cs find t 查找本字符串

:cs find f 查找本文件

:cs find i 查找包含本文件的文件


3)在~/.vimrc中添加set cscopequickfix=s-,c-,d-,i-,t-,e-

这样通过:cs find xxx查找某个符号后,会立即跳转到第一个找到该符号出现的位置,

然后可以通过:copen来打开quickfix窗口,在quickfix窗口中显示所有出现的位置。


Cscope的使用(领略Vim + Cscope的强大魅力)




vim


1、高亮所有搜索模式匹配

shift + * 向后搜索光标所在位置的单词

shift + # 向前搜索光标所在位置的单词

n和N可以继续向后或者向前搜索匹配的字符串


:set hlsearch  高亮所有匹配的字符串

:nohlsearch 临时关闭

:set nohlsearch 彻底关闭,只有重新:set hlsearch才可以高亮搜索


vim高亮显示光标所在的单词,在单词的地方输入gd


2、语法高亮

syntax on

syntax off


3、vimgrep

vimgrep /匹配模式/[g][j] 要搜索的文件/范围

g: 表示是否把每一行的多个匹配结果都加入

j: 表示是否搜索完后定位到第一个匹配的位置

vimgrep /pattern/%  在当前打开文件中查找

vimgrep /pattern/ *   在当前目录下查找所有

vimgrep /pattern/ **   在当前目录及其子目录下查找所有

vimgrep /pattern/ *.c  查找当前目录下所有的.c文件

vimgrep /pattern/ **/*  只查找子目录


cn    查找下一个

cp    查找上一个

copen  打开quickfix

cw         打开quickfix

cclose  关闭quickfix

help vimgrep   查看vimgrep帮助


通过:vimgrep /pattern/gj path来查找字符串,最好将右边的文件列表显示栏关闭,这样quickfix窗口显示比较方便查看。


4、修改了配置文件.vimrc并保存后,如果希望不重启vim而让配置立即生效,可以在打开的vim中执行:source ~HOME/.vimrc


5、vim颜色配置方案

highlight 可以查看具体的颜色配置

highlight LineNr term=underline,bold ctermfg=3 guifg=Brown


Set colorcolumn=80 设置边界线为80

Set colorcolumn=0 取消边界线设置

Highlight colorcolumn ctermbg=4 guibg=Blue

:help cterm-colors可以查看颜色对应的值


6、vim打开多个文件

vim file1 file2 file3 file4

或者进入vim后使用:e文档名来打开文档


:n 跳到后面那个文件

:N 跳到前面那个文件

:files查看打开了哪些文件

:file 查看当前的文件名


7、vim自动补全

ctrl + n或者ctrl + p

http://jingyan.baidu.com/article/76a7e409b5d525fc3b6e15fc.html


8、复制vim文件中所有内容

gg 回到文件首

shift + v 进入VISUAL LINE模式

shift + g 全选所有内容

ctrl + insert 复制所选的内容


9、[[跳到函数头部,]]跳到函数尾部

10、quickfix是vim的标准插件,本身就带有

quickfix功能将编译过程中产生的错误信息保存到文件中,然后vim利用这些信息跳转到源文件的对应位置,我们就可以进行错误的修正,之后跳到下一个错误重复上述操作,从而极大地提高编译错误的修改效率


quick常用命令:

:cc 显示详细错误信息

:cp 跳到上一个错误

:cn 跳到下一个错误

:cl 列出所有的错误

:copen 打开quickfix窗口,可以在后面添加窗口高度参数,如10行,:copen 10

:cclose 关闭quickfix窗口


11、按v进入可视化界面,然后通过左右键选择文本,再按y进行复制,p就可以进行粘帖了


12、不退出vim,直接在vim中执行":!gcc file.c -o file"就可以编译程序了


13、vim中查找特地字符串

/pattern enter

n 朝同一个方向搜索

N 朝反方向搜索


/ pattern  enter

要查找单个单词,键入该单词,并在这个单词的两边都加上空格


/^pattern enter

要查找仅出现在行首的单词,请在该单词前面加上^


/pattern$ enter

要查找仅出现在行末的单词,请在该单词的后面加上$


如果要把^和$当作普通的符号,就需要在前面加上\


14、vim自动缩进tab空格数设置为4

set smartindent
set tabstop=4
set shiftwidth=4
set softtabstop=4

tab表示一个tab显示出来是多少个空格的长度,默认8

softtabstop表示在编辑模式的时候按退格键的时候退回缩进的长度

shiftwidth表示每一级缩进的长度

15、vim的recording功能

第一步:在正常模式下(非insert模式、非visual模式)按下q键盘
第二步:选择a-z或0-9中任意一个作为缓冲器的名字,准备开始录制宏
第三步:正常的操作,此次所有的操作都会被记录在上一步中定义的缓冲器中
第四步:在非insert模式下输入q停止宏的录制
第五步:使用@ + 第二步中定义的缓冲器的名字即可就可以使用录制的命令了。

16、vim快捷键

g + ] 可以查看当前函数的所有位置的定义
ctrl + p 可自动补全
q: 显示vim命令历史

17、块选择
v 会将光标经过的地方反白选择
y将反白的地方复制
d将反白的地方删除

18、字符串替换

语法:[addr]s/源字符串/目的字符串/option

option(g表示全局替换,c表示替换前进行确认)

如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义


全局替换,`:%s/源字符串/目的字符串/g`

从当前行到文件尾替换,`:.,$%s/源字符串/目的字符串/g`

从第n行到文件尾替换,`:n,$%s/源字符串/目的字符串/g`


可以使用#或者+作为分隔符

:s#jishu/#yiliu/#  替换当前行第一个 jishu/ 为 yiliu/

:%s+/www/apras/+/web/apras1+ (使用+ 来替换 / ): /www/apras/替换成/web/apras1/

使用上面两种分隔符时,中间出现的/不会作为分隔符。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页