分类: LINUX
2012-03-05 23:17:49
从大学时开始,断断续续使用Vim也许久了,但由于之前只是把它当作一个快速编辑器来使用,熟悉的也仅仅是最基本的光标定位、复制粘贴等命令。而最近跑来杭电读一套C代码,手上仅有一台装着Debian的本子,便花了点功夫对Vim进行了一些定制,让它具备Source Insight的部分功能。
下面记录一下和代码阅读相关的Vim配置和使用方法:
Vim的配置一般都是通过修改~/.vimrc文件来完成的。在Vim的安装目录中,有一个此文件的范例,可以将它直接拷贝到家目录中使用。
$ cp /usr/share/vim/vim73/vimrc_example.vim ~/.vimrc这个文件已经包含了自动缩进和语法高亮的设置,不过对于阅读代码来说,显示行号是必不可少的。
在~/.vimrc文件最后添加:
这是一个可以在vim中显示出一个文件管理窗口的插件,插件主页为:
下载插件后,按页面上的install details进行安装,然后在~/.vimrc中添加:
这里把打开/关闭窗口的快捷键映射成mm,更方便试用。
ctags使用过IDE的话应该都用过“跳转到函数定义”之类的功能,ctags即使提供此类功能的一个工具。奉行简单折腾原则,直接在apt里安装:
# apt-get install ctags用ctags命令在你要阅读的源代码根目录下生成tags文件:
$ cd ~/SourceCodeFolder $ ctags -R然后在~/.vimrc文件最后添加相应的配置,指定tags文件的位置:
" ctags set tags=tags;这条设置会让vim自动在当前或上层文件夹中寻找tags文件,很方便。
常用操作:
taglist是一个vim插件,可以在vim中显示一个边栏样式窗口,将ctags分析到的所有tag以列表的样式显示出来,插件主页为:
下载插件后,按页面上的install details进行安装,然后在~/.vimrc中添加:
然后用vim打开已经生成过tags的某个项目文件,普通模式下输入tl,即可打开/关闭taglist窗口。
常用操作:
Cscope算是一个增强版的ctags。ctags可以跳转到函数的定义,却无法查看此函数的所有调用,而Cscope可以做到这一点。
用apt安装Cscope:
然后在源码根目录下,执行
$ cscope -Rbkq这会在源码目录中生成三个文件:cscope.out,cscope.in.out,cscope.po.out,其中cscope.out是我们需要的,其他两个是参数q的副产品。
方便起见,将添加索引文件的命令直接放到~/.vimrc中:
这样vim就会在当前目录自动寻找cscope.out文件并引用了。
上面第一个配置是设置cscope可以使用quickfix窗口。当我们要查找函数的调用时,只会跳转到第一个结果,这时候,输入:cw打开quickfix窗口即可在新的quickfix窗口中查看其余的结果,用回车或双击跳转。
使用Cscope时,通常用下面这个命令:
find可以简写成f。下面是选项的含义:
s 查找本 C 符号(可以跳过注释) g 查找本定义 d 查找本函数调用的函数 c 查找调用本函数的函数 t 查找本字符串 e 查找本 egrep 模式 f 查找本文件 i 查找包含本文件的文件使用速查基本
% 跳转到配对的括号去 [[ 跳转到代码块的开头去(但要求代码块中'{'必须单独占一行) gD 跳转到局部变量的定义处 '' 跳转到光标上次停靠的地方, 是两个', 而不是一个" mx 设置书签,x只能是a-z的26个字母 `x 跳转到书签处("`"是1左边的键)特定窗口
mm 打开/关闭winmanager窗口 tl 打开/关闭taglist窗口 :cw 打开quickfix窗口多窗口操作
:split 水平分割当前窗口 :vsplit 垂直分割当前窗口 :split file 水平分割当前窗口,并打开文件file :vsplit file 垂直分割当前窗口,并打开文件file :close 关闭当前窗口 :qa 关闭所有窗口生成索引命令
$ ctags -R $ cscope -RbkqCtags
taglist
Cscope
:cs f c|d|e|f|g|i|s|t name s 查找本c符号(可以跳过注释) g 查找本定义 d 查找本函数调用的函数 c 查找调用本函数的函数 t 查找本字符串 e 查找本egrep模式 f 查找本文件 i 查找包含本文件的文件参考文章本文参考了以下几篇文章,算是综合并简化,更详细的配置可以参考它们:
手把手教你把Vim改装成一个IDE编程环境
vi/vim使用进阶: 使用taglist插件
vi/Vim + Cscope/Ctags
原文地址:http://blog.sojingle.net/programming/editor/vimi-config-for-code-reading