在Linux下用Vim搭建一个功能强大的源码阅读环境,用了三个插件Ctags, Taglist, Cscope,下面简单总结了一下用法。
Vim(Vi IMproved)不仅仅是一个编辑器,代码补完、编译及错误跳转等方便编程的功能特别丰富。
Vim学习手册
Vim脚本语言
Vim单词缩写功能
:iabbrev #b /****************************************
:iabbrev #e ****************************************/
:abbreviate teh the
:abbreviate
Vim单词补全功能 Ctrl-P,多次Ctrl-P是切换
Vim插件目录,执行命令:set rtp
显示runtimepath
参考
taglist是一个Vim环境中的源码阅读插件,提供一个源码结构全局概况,支持C/C++, Python等多种语言。 ——Taglist
在taglist窗口(导航窗口,默认在左侧)中,可以使用下面的快捷键(不用加:):
跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样
显示光标下tag的原型定义
o 在一个新打开的窗口中显示光标下tag
u 更新taglist窗口中的tag
s 更改排序方式,在按名字排序和按出现顺序排序间切换
x taglist窗口放大和缩小,方便查看较长的tag
+ 打开一个折叠,同zo
- 将tag折叠起来,同zc
* 打开所有的折叠,同zR
= 将所有tag折叠起来,同zM
[[ 跳到前一个文件
]] 跳到后一个文件
q 关闭taglist窗口
Ctags是一个用于从程序源代码树产生索引文件(或tag文件),从而便于文本编辑器来实现快速定位的实用工具。在产生的tag文件中,每一个tag的入口指向了一个编程语言的对象。这个对象可以是变量定义、函数、类或其他的物件。 ——Ctags
首先在源码目录下执行ctags -R
生成tags文件
ctags常用命令:
1. $ ctags –R * ($ 为Linux系统Shell提示符)
2. $ vi –t tag (请把tag替换为您欲查找的变量或函数名)
3. :ts (ts 助记字:tags list, “:”开头的命令为VI中命令行模式命令)
4. :tp (tp 助记字:tags preview)---此命令不常用,可以不用记
5. :tn (tn 助记字:tags next) ---此命令不常用,可以不用记
6. Ctrl + ] 在函数调用的地方跳转到函数定义的地方
7. Ctrl + T 返回上一个查找的地方
8. Ctrl+WW 在左右窗口切换
将光标定位到想察看的函数上,然后按ctr+]键就可以进行察看了,按ctr+O可以跳回到源文件中。
Cscope 是一个 源代码阅读工具,通过这个工具可以很方便地找到某个函数或变量的定义位置、被调用的位置等信息。Cscope对 C /C++支持较好,也可以自己定制来支持Java和Perl、Python等脚本语言。 ——Cscope
在源码目录下执行cscope -Rbq
生成cscope.out
文件
-R 递归扫描目录
-b 建立交叉引用
-q 建立倒排索引,以便进行快速的符号搜索
vim下执行:cs add cscope.out
然后就可以在vim中执行cs命令了
在使用过程遇到的两个小问题:
在linux-2.6.26目录下vim -t main
进入vim,执行cs f g do_pipe
,提示cscope no connections
.
解决方法是安装cscope_maps.vim
或者手动配置cscope
在vim执行cs f g do_pipe
时, 提示File fs/pipe.c does not exist
.
解决方法是在~/.vimrc
中取消set autochdir
.
$apt-get install vim
$apt-get install ctags
$apt-get install cscope
$
$mkdir ~/.vim/plugin
$unzip taglist_46.zip
$mv plugin/taglist.vim ~/.vim/plugin/
$
$vim ~/.vimrc
let Tlist_Ctags_Cmd='/usr/bin/ctags'
$
$wget http://cscope.sourceforge.net/cscope_maps.vim
$mv cscope_maps.vim ~/.vim/plugin/
上面是在普通用户工作目录下建立的配置文件及插件,当切换到root模式时,并不能使用taglist等。