最近一段时间,发觉使用source insight看代码有点不太方便,主要是修改代码和debug的时候,putty和source insight窗口要来回切换,非常麻烦。研究了一下配置Unix平台下的开发环境,感觉还不错,基本可以实现source insight的一些重要功能。
主要用到的软件:
vim + ctags + taglist + cscope + minibufexpl + project + Tree + FileTree
1.vim
vim –version | grep cscope会出现支持软件列表
vim支持cscope,在配置文件应该列出来
./configure –enable-cscope
make
% 用来匹配一对()、{}、<>
g=gg 美化所有代码
v 然后选定范围,= 美化选定代码
gg 行首、G 行末
......
2.ctags
./configure – make – make install
ctags –R
Ctrl-] 跳转到callee(函数定义)
Ctrl-t 跳转回caller
来回切换Call Stack
3.taglist
下载taglist_41.zip
解压之后存放到home dir/.vim/plugin和.vim/doc
如何使用
编辑~/.vimrc,加入: map :TlistToggle
这样,就可以在vim中用[F3]打开taglist窗口,察看tags并在tags间跳转了。
按ctrl+w,w可以 在taglist和代码窗口间切换。
本质上,这是对于split window的操作
Ctrl-W w 窗口轮流切换
Ctrl-W + 扩大窗口 ( Ctrl-W + 扩大窗口num行)
Ctrl-W - 缩小窗口
Ctrl-W h 移动到窗口左边
Ctrl-W j 移动到窗口下边
Ctrl-W k 移动到窗口上边
Ctrl-W l 移动到窗口右边
4.cscope
cscope的编译和安装没有特别之处,./configure - make - make install即可。
在vim中使用并不需要进行太多的设置,不过首先vim编译时必须加入了cscope的支持
根据文档的建议,在~/.vimrc中加入以下内容:
if has("cscope")
set csto=0
set cst
set nocsverb
if filereadable("cscope.out")
cs add cscope.out
$PWD
$PWD必须加在后面,否则的话,如果cscope –bR是在一个相对路径上执行,则产生的cstag会使用相对路径,这样会导致vim打不开。因为,在vim中,:vi file_dir是一个相对于当前打开文件的路径,而在cscope –bR中出现的是相对运行cscope –bR的路径,所以必定打不开。cs add path1 path2,path2必须用$PWD来作为绝对路径的开头,$PWD必定是运行vim ./path/???.c的current working dir。
elseif $CSCOPE_DBPATH != ""
cs add $CSCOPE_DBPATH $CSCOPE_DBPATH
endif
set csverb
endif
nmap s :scs find s =expand("")
nmap g :scs find g =expand("")
nmap c :scs find c =expand("")
nmap t :scs find t =expand("")
nmap e :scs find e =expand("")
nmap f :scs find f =expand("")
nmap d :scs find d =expand("")
选项说明可以在文档中查到
:
'csto' 的值决定 |:cstag| 命令查找的次序。如果 'csto' 被设为 0,cscope 数据库先
被搜索,搜索失败的情况下在搜索标签文件。如果
'csto' 被设为 1,标签文件会在
cscope 数据库之前被搜索。缺省值为 0。
例
:
:set csto=0
:set csto=1
这样就会先用
cscope搜索,如果失败了再用tag搜索。
若设定了
'cscopetag' 选项,":tag" 命令,CTRL-] 以及 "vim -t" 都会使用 |:cstag|
而不是缺省的
:tag。也就是说,设定 'cst' 选项意味着你总同时搜索 cscope 数据库和
标签文件。缺省值为关。例如
:
:set cst
:set nocst
设置了这个选项后,
tag的功能就会替换成cstag了(tag命令和cstag命令变成了同一个命令,因此ctrl+]实际上也是调用cstag来处理)
如果
'cscopeverbose' 没有被设定 (缺省情况),当添加一个数据库时,成功与否不会被
显示。理想的情况是,你先在
|.vimrc| 文件中复位该选项,再添加 cscope 数据库,然
后再置位。这样,如果你在使用
vim 当中动态添加数据库,你就会被 vim 告知结果。例
如
:
:set csverb
:set nocsverb
cs add $CSCOPE_DBPATH $CSCOPE_DBPATH这行是我自己改的。因为我的cscope.out放在项目的根目录里,不指定pre-path的话cs就会在当前目录下使用相对路径查找文件,指定了pre-path就会使用绝对路径了(或者说把相对路径的参考点指定为了pre-path)。另外,不能写成:
cs add cscope.out $CSCOPE_DBPATH
因为这样
cscope会在当前目录下寻找cscope.out
现在可以开始使用了
,跟使用tag一样,要先建立一个数据库:
cd /project_root_dir/
cscope -Rb
如果是
kernel源代码,最好加上-k选项来忽略/usr/include(因为kernel不会使用这个目录)
然后就可以
vi source.c阅读代码了。加入vi后,用cs help可以查看帮助,cs show可以查看当前打开的数据库。由于上面对几个cscope命令进行了键绑定,因此可以用ctrl+[,后面跟一个字母键来执行对应的操作。如在函数名foo上按ctrl+[,c,就可以看到调用了这个函数的所有函数。
5.minibufexpl
minibufexpl.vim拷贝至$VIM/vimfiles/plugin目录后便安装完毕。重新启动Vim,只要用single Vim 打开多个文件,就会在Vim菜单栏下新增一个名为-MiniBufExplorer-的窗口,在其中列出现有buffer(缓冲)的编号和名字(文件名)。只要鼠标双击buffer tab便能切换到对应文件,使其处于可编辑状态;如果光标处于-MiniBufExplorer-窗口,也可以用Tab或Shift + Tab在buffer之间来回移动,回车确认切换到光标所在的buffer。用键盘上的d键可关闭选中的buffer(当然此时光标在-MiniBufExplorer-窗口中)。
另外我们可以把键盘上的上下左右四个方向键绑定到这个
plugin的几个函数上,使buffer切换更加便捷:
1 map :MBEbn "右键,切换到下一个buffer窗口
2 map :MBEbp "左键,切换到上一个buffer窗口
也可以在
command line模式使用:b,切换到第num个buffer
6
.让
VIM
环境看上去像
source insight
下载
Tree
和
FileTree
插件,然后安装,将下面内容添加到
.vimrc
中。
map tl :TlistToggle
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1
filetype on "make sure VIM can recognize the file type
let Tlist_Use_Right_Window=1 "let the tag list window on the right-most side of the window
let Tlist_File_Fold_Auto_Close=1 "close the tag list as soon as it lose focus
let Tlist_File_Fold_Auto_Close=1 "close the tag list as soon as it lose focus
nnoremap :TlistToggle "use F8 to evoke the taglist plugin
nnoremap :FileTree "use F9 to evoke the FileTree plugin
nnoremap } " use F10 to do the code preview