天天看点

在window7下使用vi + ctags + cscope + taglist

1)安装cygwin+ctags+cscope

下载setup.exe,以管理员身份运行;

搜索vim, ctags, cscope,选中,taglist没有,后续自己单独下载;

安装完成后,桌面上的cygwin terminal好像不能用;

找到C:\cygwin\Cygwin批处理文件,运行就能打开终端;

注:我后来又重装了一次,这次桌面上的cygwin terminal快捷键是可用的,看来前几次安装就是出了问题。

2)找到vi的配置文件:

运行vi,:echo $VIM 可以查看VIM的安装目录,我的安装目录是/usr/share/vim,对应window的C:\cygwin\usr\share\vim,其实我的安装目录下还有一级vim73目录,的配置文件模板就是/usr/share/vim/vim73/vimrc_example.vim,打开它,有段说明,按照说明将这个vimrc_example.vim复制成~/.vimrc文件,这个就是vi的配置文件了。

3)配置ctags

cd到代码目录

ctags -R *

生成tags文件;

告诉vi tags索引文件的位置:

在~/.vimrc中加入一行:

set tags=<tags file path>

例如:

set tags=~/linux-0.11/tags

重启vi之后,你现在可以使用Ctrl+]跳转了,把光标放到某个函数调用上,试试看。

4)安装taglist

到官网下载taglsit,是一个压缩包,解压后会看到两个文件夹:plugin和doc,把这两个文件夹里的内容复制到vi已有的对应目录:/usr/share/vim/vim73/plugin和/usr/share/vim/vim73/doc

重启vi,taglist就自动生效了,在vi中输入命令:Tlist,你就会看到Taglist窗口出现了。

5)配置cscope

在vi中使用cs命令的时候,vi默认寻找cscope可执行程序,可是我们在安装cygwin的时候装的是mlcscope,所以我们需要做个链接:

cd /usr/bin

ln -s mlcscope cscope

cd到代码目录,搜索所有你感兴趣的文件,例如:

find -name "*.s" -o -name "*.c" > file_list.cs

生成cscope索引文件

cscope -Rbkq -i file_list.cs

告诉vi cscope索引文件的位置:

在~/.vimrc中加入一行:

cs add <cscope.out path> <pre_path>,例如:

cs add ~/linux-0.11/cscope.out ~/linux-0.11/

<pre_path>是cscope在使用索引文件查找源码文件时候的基准位置; 比如cscope.out里面记录了一个init/main.c文件,cs在找这个文件的时候就知道从~/linux-0.11为基准找int/main,也就是说cs会找~/linux-0.11/init/main.c文件;

如果你在生成cscope.out索引文件的时候使用了-P参数,则索引文件里就已经记录了每个源码文件的绝对路径,于是你在使用cs add加载数据库的时候就不需要再制定<pre_path>了;

好了,现在可以在vi中使用cs搜索代码了,试试:cs f g foo查找foo的定义;

6) 为了让vi更好用,在.vimrc文件中加入这么几行:

" add by mayq

" set tag database

set tags=~/linux-0.11/tags

" set cscope database

cs add ~/linux-0.11/cscope.out ~/linux-0.11/

" show line number

set nu

" set current line hightlight, forground color=white, backgournd color=dark

" red

set cursorline

hi CursorLine cterm=NONE ctermbg=darkred ctermfg=white

hi CursorColumn cterm=NONE ctermbg=darkred ctermfg=white

" taglist setting

let Tlist_Use_LEFT_Window=1

let Tlist_File_Fold_Auto_Close=1

let Tlist_Show_One_File=1

let Tlist_GainFocus_On_ToggleOpen=1

let Tlist_Exit_OnlyWindow=1

let Tlist_Auto_Open=1

nmap tl :Tlist<cr>

" end mayq