Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1351054
  • 博文数量: 206
  • 博客积分: 10571
  • 博客等级: 上将
  • 技术积分: 2610
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-30 11:50
文章分类
文章存档

2014年(1)

2013年(4)

2012年(18)

2010年(14)

2009年(31)

2008年(3)

2007年(135)

分类: 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文件最后添加:

" custom config set numberwinmanager

这是一个可以在vim中显示出一个文件管理窗口的插件,插件主页为:

下载插件后,按页面上的install details进行安装,然后在~/.vimrc中添加:

nmap mm :WMToggle

这里把打开/关闭窗口的快捷键映射成mm,更方便试用。

ctags

使用过IDE的话应该都用过“跳转到函数定义”之类的功能,ctags即使提供此类功能的一个工具。奉行简单折腾原则,直接在apt里安装:

# apt-get install ctags

用ctags命令在你要阅读的源代码根目录下生成tags文件:

$ cd ~/SourceCodeFolder $ ctags -R

然后在~/.vimrc文件最后添加相应的配置,指定tags文件的位置:

" ctags set tags=tags;

这条设置会让vim自动在当前或上层文件夹中寻找tags文件,很方便。
常用操作:

跳转到光标所在函数的定义处 跳回调用处taglist

taglist是一个vim插件,可以在vim中显示一个边栏样式窗口,将ctags分析到的所有tag以列表的样式显示出来,插件主页为:

下载插件后,按页面上的install details进行安装,然后在~/.vimrc中添加:

" taglist let TList_Show_One_File = 1 "只显示当前文件的Tag let TList_Exit_OnlyWindow = 1 "当只剩下taglist窗口时,退出vim let TList_Use_Right_Window = 1 "显示在右侧 let TList_GainFocus_On_ToggleOpen = 0 "打开时焦点不放在tl窗口中 nmap tl :TlistToggle "绑定打开快捷键为tl

然后用vim打开已经生成过tags的某个项目文件,普通模式下输入tl,即可打开/关闭taglist窗口。
常用操作:

tl 打开/关闭taglist窗口(自定义) 在状态栏显示光标处tag的定义 跳转到光标处tag的定义(也可用鼠标双击) o 在新窗口中打开光标处的tag u 更新tl窗口中的tag s 更改排序方式 x tl窗口放大和缩小 +/zo 打开一个折叠 -/zc 将tag折叠 */zr 打开所有折叠 =/zm 将所有tag折叠Cscope

Cscope算是一个增强版的ctags。ctags可以跳转到函数的定义,却无法查看此函数的所有调用,而Cscope可以做到这一点。
用apt安装Cscope:

# apt-get install cscope

然后在源码根目录下,执行

$ cscope -Rbkq

这会在源码目录中生成三个文件:cscope.out,cscope.in.out,cscope.po.out,其中cscope.out是我们需要的,其他两个是参数q的副产品。
方便起见,将添加索引文件的命令直接放到~/.vimrc中:

" cscope set cscopequickfix=s-,c-,d-,i-,t-,e- if filereable("cscope.out") cs add cscope.out elseif $CSCOPE_DB != "" cs add $CSCOPE_DB endif

这样vim就会在当前目录自动寻找cscope.out文件并引用了。
上面第一个配置是设置cscope可以使用quickfix窗口。当我们要查找函数的调用时,只会跳转到第一个结果,这时候,输入:cw打开quickfix窗口即可在新的quickfix窗口中查看其余的结果,用回车或双击跳转。
使用Cscope时,通常用下面这个命令:

:cs find c|d|e|f|g|i|s|t name

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 关闭所有窗口 h|j|k|l 移动光标到左/下/上/右边窗口

生成索引命令

$ ctags -R $ cscope -Rbkq

Ctags

跳转到光标所在函数的定义处 跳回调用处

taglist

在状态栏显示光标处tag的定义 跳转到光标处tag的定义(也可用鼠标双击) o 在新窗口中打开光标处的tag u 更新tl窗口中的tag s 更改排序方式 x tl窗口放大和缩小 +/zo 打开一个折叠 -/zc 将tag折叠 */zr 打开所有折叠 =/zm 将所有tag折叠

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

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

我是一粒糖2012-03-06 09:48:22

恩,有的插件挺好用的!