vim+ctags+cscope+taglist+nerdtree

vim+ctags+cscope+taglist+nerdtree

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


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 :TlistToggle

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

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 :NERDTreeToggle

这样以后在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窗口中显示所有出现的位置。

下面配置可使vim 向前自动查找并加载cscope.out

if has("cscope")
    set csprg=/usr/bin/cscope
    set csto=0
    set cst
    set csverb
    set cspc=3
    "add any database in current dir
    if filereadable("cscope.out")
        cs add cscope.out
    "else search cscope.out elsewhere
    else
       let cscope_file=findfile("cscope.out", ".;")
       let cscope_pre=matchstr(cscope_file, ".*/")
       if !empty(cscope_file) && filereadable(cscope_file)
           exe "cs add" cscope_file cscope_pre
       endif      
     endif
endif

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

vim

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

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

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

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


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

:nohlsearch 临时关闭

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


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"就可以编译程序了


参考资料

ctags、cscope、taglist安装:

http://blog.csdn.net/luckywang1103/article/details/44181557

vim 自动加装cscope.out

http://blog.csdn.net/mci2004/article/details/794407

还有一些功能我没有安装,现在用不到,以后再安装:

http://www.360doc.com/content/16/0704/16/15700426_573046701.shtml

下面介绍一个github上的vim项目,项目工程中给出了一个强大的vim插件集,并且配置简便

https://github.com/RangerKD/vim

同时RangerKD下还有一些别的好的项目可以看看哦,比如Visual Tracking Algorithm


Enjoy it!


你可能感兴趣的:(Tools)