vim进阶之添加ctags和cscope

你想要一个非常强大的ide吗?除了eclipse,visual studio,android studio等我们就没有选择了吗?这样想就大错特错了,在linux下使用增强功能后的vim,emacs一样能达到eclipse,visual studio,source insight的功能,今天给大家分享下ctags 和cscope的配置和使用


环境:64bit Ubuntu Desktop 12.04 LTS

快捷通道:https://github.com/alexanderkenndy/advancevim


先来看看效果尝尝鲜

vim进阶之添加ctags和cscope_第1张图片


下面就开始配置之旅吧



1.配置ctags

ctags的方便之处就在于多文件编辑,文件定位跳转,通过命令生成一个tags文件记录源文件的索引,帮您快速定位代码,它支持的语言非常多,如c,c++,java等。

1.1下载ctags-5.8.tar.gz,

via:https://github.com/alexanderkenndy/advancevim/blob/master/ctags-5.8.tar.gz

another :http://ctags.sourceforge.net

1.2解压安装

$ tar -xf ctags-5.8.tar.gz
$ ./configure
$ make
$ sudo make install

1.3生成索引文件

进入到源文件所在目录,输入如下命令

$ ctags -R 

此命令会在当前目录生成一个名为tags的文件,使用vim打开文件,设置生效命令 

:set tags=./tags

如果经常在此目录编辑,可以将此命令配置到vimrc中,如下是我的配置:

if has("tags")
    set tags=tags
endif
set autochdir

1.4使用方式

将光标定位在c/c++中的一个函数或成员变量中,按住Ctrl+] 则跳转到方法的声明处,再次按下Ctrl+t,则又跳回来。



2.配置cscope
cscope说自己就是一个超频的ctags,使用过非常强大,不但分析出哪个函数定义的何处,还能分析出在哪里被调用


2.1下载cscop-15.8a.tar.gz

via :https://github.com/alexanderkenndy/advancevim/blob/master/cscop-15.8a.tar.gz

another:http://cscope.sourceforge.net

2.2解压安装

$ tar -xf cscop-15.8a.tar.gz
$ ./configure
$ make
$ sudo make install

Tip:

1.如果在make过程中出现 curses.h not found 异常导致make失败,则需要安装libncurses5-dev包,最好连libncursesw5-dev一并安装

2.如果在make过程中出现 fscanner.c 错误,并且伴随着Flex的问题,则需要安装bison和flex,安装方式一样:sudo apt-get install bison flex.

然后在 make clean,然后继续make。

2.3生成索引文件

我关注的是.cc,.h,.cpp文件,所以代码如下

find . -name "*.cc" -o -name "*.h" -o -name "*.cpp" > cscope.files
cscope -bkq -i cscope.files

命令执行完毕之后,会生成三个文件,但是有一个文件时我们比较关心的,就是 cscope.out,打开vim,使用命令 

:cs add /home/alexanderkenndy/node-v0.10.21/src/cscope.out 
当然好是要先配置vimrc,如果是通过apt-get install  安装vim的话,默认vimrc是存放在 /etc/vim/下

nmap s :cs find s =expand("")
nmap g :cs find g =expand("")
nmap c :cs find c =expand("")
nmap t :cs find t =expand("")
nmap e :cs find e =expand("")
nmap f :cs find f =expand("")
nmap i :cs find i ^=eptend("")$
nmap d :cs find d =expand("")

2.4使用方式

使用vim打开文件之后,找到一个你想要查看的方法,输入快捷键:Ctrl-x,然后按下s,则跳转到当前方法的声明处,相当于输入:cs find s 加上方法名


3.配置 TagList 插件

taglist的功能十分强大,可以很方便的浏览源代码,类似于eclipse的outline,列出代码当中定义的局部变量,方法名等,可以通过taglist快速定位到代码指定的位置。

据官网说支持的语言非常多,有java,c++,python,perl,erlang等主流程序设计语言都支持吧。


3.1 插件环境

想要在vim中添加帮助文档,插件,以及语法高亮定义文件,则需要在~/.vim/下创建三个文件夹,分别名为 plugin,doc,syntax,所有的插件都放在plugin下,我的目录结构如下:

vim进阶之添加ctags和cscope_第2张图片

3.2下载插件

via :https://github.com/alexanderkenndy/advancevim/tree/master/plugin

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

3.3 配置插件 

下载放到plugin 目录后,还需要在vimrc中配置如下代码段

let Tlist_Ctags_Cmd='/usr/local/bin/ctags' 
let Tlist_Show_One_File=1
let Tlist_OnlyWindow=1
let Tlist_Use_Right_Window=0
let Tlist_Sort_Type='name'
let Tlist_Exit_OnlyWindow=1
let Tlist_Show_Menu=1
let Tlist_Max_Submenu_Items=10
let Tlist_Max_Tag_length=20
let Tlist_Use_SingleClick=0
let Tlist_Auto_Open=0
let Tlist_Close_On_Select=0
let Tlist_File_Fold_Auto_Close=1
let Tlist_GainFocus_On_ToggleOpen=0
let Tlist_Process_File_Always=1
let Tlist_WinHeight=10
let Tlist_WinWidth=18
let Tlist_Use_Horiz_Window=0
nmap tl :TlistToggle

如此则taglist插件就配置好了。

3.4 使用方式

使用vim打开一个源文件,如test.cpp 

呼出方式1

:Tlist

呼出方式2

如vimrc中配置的,键 tl 已经被我绑定到了TlistToggle这个命令上,非编辑模式下输入 tl 试试,则代码的变量声明,函数名等就列在vim左边啦


4.配置多terminal环境

有的时候希望一边编辑文件,一边操作terminal,但是没有办法,vim模式下只能用:! + command 操作,窗口之间切来切去是不是很烦躁,emacs可以通过 alt+x shell 来创建命令行窗口,现在有了terminator ,vim用户不用发愁了,就可以帮助我们了,下面看下我的效果图尝尝鲜

vim进阶之添加ctags和cscope_第3张图片


4.1 安装

安装方式就比较简单了

$ sudo apt-get install terminator

4.2 常用快捷键

Ctrl-Shift-E :竖分屏

Ctrl-Shift-O :横分屏

Ctrl-Tab或Ctrl-Shift-N :在多个屏之间切换

Ctrl-Shift-Left :将可拖拽的bar向左移动(竖分屏)

Ctrl-Shift-Right :将bar向右移动(竖分屏)

Ctrl-Shift-UP : 将bar向上移动(横分屏)

Ctrl-Shift-Down :将bar向下移动(横分屏)

Ctrl-Shift-S :隐藏滚动条

Alt-UP :光标向上移动

Alt-Down :光标向下移动

Alt-Left :光标向左移动

Alt-Right:光标向右移动

Ctrl-Shift-C :复制选中文本

Ctrl-Shift-V  :粘贴选中的文本

Ctrl-Shift-X  :只显示当前terminal窗口,隐藏其他terminal窗口

Ctrl-Shift-W :关闭当前窗口

Ctrl-Shift-Q  :关闭terminal



附:我的vimrc配置
via : https://github.com/alexanderkenndy/advancevim/blob/master/vimrc


---------------------------------------------------------
持续更新中....


author :alexanderkenndy
create date:2014/6/15

你可能感兴趣的:(linux)