Chinaunix首页 | 论坛 | 博客
  • 博客访问: 971669
  • 博文数量: 192
  • 博客积分: 3070
  • 博客等级: 中校
  • 技术积分: 1861
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-27 23:44
个人简介

Start Linux Leave Linux a while Back to Linux

文章分类

全部博文(192)

文章存档

2023年(18)

2022年(11)

2021年(8)

2020年(14)

2019年(7)

2018年(13)

2017年(16)

2016年(4)

2012年(2)

2011年(13)

2010年(26)

2009年(13)

2008年(27)

2007年(20)

我的朋友

分类:

2011-06-02 09:57:53


一, 软件安装

网上有很多很詳細的关于如何配置,使用vim+ctags+cscope进行代码查看编辑的工具,我写的主要是入门级的,借助各种脚本,可以快速的搭建一个比较好用的开发环境。

步骤:

1. 安装完整的vim,在10.04的源里面没有什么vim-full这样的版本,直接安装vim就可以了;

    $ sudo apt-get install vim

 

2. 安装网络上流传的很牛X的一个VIM插件:   
    $ mkdir ~/.vim_runtime
    $ svn co svn://orangoo.com/vim ~/.vim_runtime
    $ cat ~/.vim_runtime/install.sh
    $ sh ~/.vim_runtime/install.sh linux

    而且你还可以对插件进行升级:
    $ svn update ~/.vim_runtime

 

安装完上面两步,vim用起来就已经比较顺手了,里面有很多脚本,熟练使用需要慢慢去摸索。

接下来就是使vim变的像Source Insight一样方便查看代码的辅助工具了。

 

3. 安装ctags

    sudo apt-get install ctags

    这个工具使用比较简单,在源码目录下面直接用: ctags -R 就可以生成tags脚本文件,可以完成一些简单的代码索引,但是功能还不够强大。

 

4. 安装taglist脚本

    下载地址:   

    下载后直接把解压出来的doc, plugin两个文件夹覆盖到"~/.vim_runtime"目录下,重新进入vim就可以自动加载这个脚本了。它的主要功能是可以在vim窗口中列出 文件中所有的函数,全局变量和宏等信息。可以使用ctrl+w+w在两个窗口之间切换。

 

5. 安装cscope

    $ sudo apt-get install cscope

    安装完成后,再去下载一个设置快捷键的脚本:

    这样就可以使用快捷键完成查找函数变量定义,函数调用等很多索引功能。

    注意:cscope默认只会索引c代码,如果想要增加对多种代码的索引,需要借助其他方式,请参考下面的链接:

    http://easwy.com/blog/archives/advanced-vim-skills-cscope/

 

最后提供几个VIM资源的网站:

http://easwy.com/blog/


二,使用说明


1,生成索引文件

在源代码目录下使用一下两条命令即可生成cscope索引文件和tags文件。

helight@helight-desktop:~/Downloads/linux-2.6.26$ make cscope
FILELST cscope.files
MAKE cscope.out
helight@helight-desktop:~/Downloads/linux-2.6.26$ make tags
MAKE tags
helight@helight-desktop:~/Downloads/linux-2.6.26$ ls tags -l
-rw-r–r– 1 helight ftp 69274841 2008-09-27 11:04 tags
helight@helight-desktop:~/Downloads/linux-2.6.26$ ls cscope.* -l
-rw-r–r– 1 helight ftp 23814144 2008-09-25 20:08 cscope.in.out
-rw-r–r– 1 helight ftp 609665 2008-09-25 20:06 cscope.list
-rw-r–r– 1 helight ftp 174470617 2008-09-25 20:08 cscope.out
-rw-r–r— 1 helight ftp 124973256 2008-09-25 20:08 cscope.po.out

2,一般源文件中生成索引文件

为了方便使用,编写了下面的脚本来更新cscope和ctags的索引文件:

#!/bin/sh
find . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files
cscope -bkq -i cscope.files
ctags -R


这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。
其中cscope.out是基本的符号索引,后两个文件是使用"-q"选项生成的,可以加快cscope的索引速度。
这个脚本,首先使用find命令,查找当前目录及子目录中所有后缀名为".h", ".c"和".c"的文件,并把查找结果重定向到文件cscope.files中。 然后cscope根据cscope.files中的所有文件,生成符号索引文件。最后一条命令使用ctags命令,生成一个tags文件,在vim中执 行":help tags"命令查询它的用法。它可以和cscope一起使用。上面所用到的命令参数,含义如下:
-R: 在生成索引文件时,搜索子目录树中的代码
-b: 只生成索引文件,不进入cscope的界面
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-k: 在生成索引文件时,不搜索/usr/include目录
-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用“-”,表示由标准输入获得文件 列表。
-I dir: 在-I选项指出的目录中查找头文件
-u: 扫描所有文件,重新生成交叉索引文件
-C: 在搜索时忽略大小写
-P path: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。

3,在VIM使用cscope查找

1,加载cscope.out文件
在VIM中使用cscope非常简单,首先调用“cscope add”命令添加一个cscope数据库,然后就可以调用“cscope find”命令进行查找了。VIM支持8种cscope的查询功能,如下:例如,我们想在代码中查找调用work()函数的函数,我们可以输入:“:cs find c work”,回车后发现没有找到匹配的功能,可能并没有函数调用work()。我们再输入“:cs find s work”,查找这个符号出现的位置,现在vim列出了这个符号出现的所有位置。我们还可以进行字符串查找,它会双引号或单引号括起来的内容中查找。还可 以输入一个正则表达式,这类似于egrep程序的功能。
在源代码目录下打开vim。要使用cscope查找就必须加载cscope.out文件.在vim命令行下执行:

:cs add cscope.out

在vim命令行下执行:

:cs help
cscope commands:
add : Add a new database (Usage: add file|dir [pre-path] [flags])
find : Query for a pattern (Usage: find c|d|e|f|g|i|s|t name)
c: Find functions calling this function
d: Find functions called by this function
e: Find this egrep pattern
f: Find this file
g: Find this definition
i: Find files #including this file
s: Find this C symbol
t: Find assignments to
help : Show this message (Usage: help)
kill : Kill a connection (Usage: kill #)
reset: Reinit all connections (Usage: reset)
show : Show connections (Usage: show)


s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
d: 查找本函数调用的函数
c: 查找调用本函数的函数
t: 查找指定的字符串
e: 查找egrep模式,相当于egrep功能,但查找速度快多了
f: 查找并打开文件,类似vim的find功能
i: 查找包含本文件的文

2,使用cscope查找do_fork函数的定义:
在vim命令行下执行:

:cs f g do_fork

4,在VIM中使用tags查找符号:

在vim命令行下执行:

:tag xxx

即可找到你想找的函数或是数据结构或是函数xxx
关于tags的其它用法可以在vim中执行”:help tags”命令进行查询。

5,其它命令介绍:

ctrl+]:在函数调用的地方跳转到函数定义的地方
ctrl+t:返回上一个查找的地方

6,特别注意:

所生成的cscope.out和tags文件要在打开VIM所在的文件夹,否则VIM无法找到相关符号信息。


三, 保存当前文档的状态

本节所用命令的帮助入口:

:help mksession
:help 'sessionoptions'
:help source
:help wviminfo
:help rviminfo
:help 'viminfo

[会话]

我们可以使用”:mksession [file]”命令来创建一个会话文件,如果省略文件名的话,会自动创建一个名为Session.vim的会话文件。会话文件,其本质上是一个VIM脚本,你可以使用上述命令生成一个会话文件,然后再查看其中的内容,就会对会话文件有一个深入的认识。

会话文件中保存哪些信息,是由'sessionoptions'选项决定的。缺省的'sessionoptions'选 项包括"blank,buffers,curdir,folds,help,options,tabpages,winsize",意为会话文件会恢复当 前编辑环境的空窗口、所有的缓冲区、当前目录、折叠相关的信息、帮助窗口、所有的选项和映射、所有的标签页、窗口大小。

如果你使用windows上的VIM,并且希望你的会话文件可以同时被windows版本的VIM和UNIX版本的VIM共同使用的话,在'sessionoptions'中加入'slash'和'unix',前者把文件名中的’\’替换为’/’,后者会把会话文件的换行符保存成unix格式。

如果你不希望在会话中保存当前路径,而是希望会话文件所在的目录自动成为当前工作目录,那么,需要在'sessionoptions'去掉'curdir',加入'sesdir', 这样每次载入会话文件时,这个文件所在的目录,就被设为VIM的当前工作目录。在你通过网络访问其它项目时,或者你的项目有多个不同版本(位于不同的目 录),而你想始终使用一个会话文件时,这个选项比较有用:你只需要把会话文件拷贝到不同的目录,然后使用就可以了。会话文件中保存的是文件的相对路径,而 不是绝对路径。

我们在上面使用”:mksession”命令创建了会话文件,那么怎么使用会话文件恢复编辑环境呢?很简单,你只需要使用”source {file}”来导入会话文件。因为会话文件是一个脚本,里面保存的是Ex命令,所以”source”命令只是把会话文件中的Ex命令执行一遍。

[viminfo]

使用”:wviminfo [file]”命令,可以手动创建一个viminfo文件。

其实,在VIM退出时,每次都会保存一个.viminfo文件在用户的主目录。我们使用”:wviminfo”命令则是手动创建一个viminfo文件,因为缺省的.viminfo文件会在每次退出VIM时自动更新,谁知道你在关闭当前软件项目后,又使用VIM做过些什么呢?这样的话,.viminfo中的信息,也许就与你所进行的软件项目无关了。还是手动保存一个保险。

:wviminfo”命令保存哪些内容,以及保存的数目,由'viminfo'选项决定,这个选项的值在windows上和在linux上的缺省值不同,具体含义参阅手册。

要读入你所保存的viminfo文件,使用”:rviminfo [file]”命令。


现在,回到我们的例子,依旧是上篇文章中的抓图,先看一下我们当前目录,执行”:pwd”,显示“/home/easwy/src/vim70”,接下来,执行下面的命令:

:cd src                            '切换到/home/easwy/src/vim70/src目录
:set sessionoptions-=curdir        '在session option中去掉curdir
:set sessionoptions+=sesdir        '在session option中加入sesdir
:mksession vim70.vim               '创建一个会话文件
:wviminfo vim70.viminfo            '创建一个viminfo文件
:qa                                '退出vim

退出vim后,在命令行下执行“gvim &”,再次进入VIM,这时看到的是一个空白窗口。然后执行下面的命令:

:source ~/src/vim70/src/vim70.vim  '载入会话文件
:rviminfo vim70.viminfo            '读入viminfo文件

最后在.vimrc中加入以下内容:

au VimLeave * mksession! ~/.vim/session/%:t.session
au VimLeave * wviminfo! ~/.vim/session/%:t.viminfo

并保证 目录~/.vim/session存在.

然后写一个脚本程序gvims:
#!/bin/sh
if [ -r ~/.vim/session/$1.session ]; then
gvim "+source ~/.vim/session/$1.session" "+rviminfo ~/.vim/session/$1.viminfo"
else
gvim $1
fi



阅读(1478) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~