CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 18197|回复: 12

自己动手定制一个高效阅读源代码的vim

[复制链接]
发表于 2013-7-12 12:27:11 | 显示全部楼层 |阅读模式
本帖最后由 aaron 于 2013-11-2 14:01 编辑


  
阅读大型工程的源代码时,我们经常需要在多个源文件之间实现函数、宏定义、外部变量等的跳转查询,但这些功能仅靠vim完成是困难的,所以还需借助一些额外的工具来打造一款合适自己的vim。
  
1、安装VIM
  
   安装vim比较简单,也没有特别要注意的地方,这里就不多讲。如果你是在ubuntu系统下,直接采用:
  
$ sudo apt-get install vim或者$ sudo apt-get install vim-gnome。安装好之后,试编辑一个文件,看看是否运行正常(一般不会有问题)。然后看看自己的用户目录下有没有一个vim隐藏配置文件:.vimrc文件和一个.vim隐藏文件夹:.vim如果没有,可以通过下面方式创建:
  
1)   打开vim,在命令行模式下输入::!cp -i $VIMRUNTIME/vimrc_example.vim ~/.vimrc
  
就会在自己的用户目录下生成vim隐藏配置文件:.vimrc。
  
2)   cd到用户目录下,运行下面命令:
  
$ mkdir -p /.vim/{plugin,doc,syntax}
  
就会产生三个目录:~/.vim/plugin、~/.vim/doc、~/.vim/syntax

3)在自己的用户目录下新建  .vim  隐藏文件夹:
$ mkdir .vim   


2、ctag的配置
  
tags文件是实现跳转功能的数据库文件,就是它把我们送到我们想要去的地方的。比如我们在程序里调用一个函数i2c_master_recv,在某个时刻想查看这函数本身是怎么实现的。那只需把光标停在关键词上,再按一下组合键:“ctrl+]”, 就会立刻跳转到库函数i2c_master_recv的源代码的地方,再按一下组合键 “ctrl+o” 就可以跳回来。
  
当然如果你要查询的函数是对一个系统调用的封装,你就可以顺着tags 提供的道路跳到内核去查看源代码是怎么写的,当然这时候可能会有不止简单的两层封装定义,但我们一次次跳转就可以深入其里,了解内幕。
  
首先,我们要安装ctags工具:
  
$ sudo apt-get install ctags
  
如果提示找不到软件包ctags,就update一下你的软件源,还不行的话试试把ctags改成 exuberant-ctags。下载完后,你就可以用它来产生标签文件tags了。
  
ctags常用命令列举:
  
1)   建立数据库命令
  
# ctags -R或者exuberant-ctags -R   // 这个命令是在终端命令行下执行的(-R表示递归向下)
  
2)   在vim编辑器中浏览
  
:ta x   
  
跳转到符号x的定义处,如果有多个符号,直接跳转到第一处
  
:ts x   
  
列出符号x的定义
  
:tj x
  
可看做上面两个命令的合并,如果只找到一个符号定义,那么直接跳转到符号定义处,如果有多个,则让用户自行选择。
  
Ctrl+]
  
跳转到当前光标下符号的定义处,和ta类似。
  
Ctrl+t
  
跳转到上一个符号定义处,和上面的配合基本上就能自由跳转了。
  
:tn和:tp
  
是在符号的多个定义之间跳转。
   
3、使用VIM插件TagList(源代码结构浏览)
  
Taglist是vim的一个插件,可以方便地在终端侧边显示出当前程序所有的函数、宏等信息,支持鼠标双击跳转,对于规模比较大的代码而言,这是一个非常实用功能。
    
下载完解压,得到两个文件夹 doc和plugin,将两个文件夹存放到用户目录下的隐藏文件夹.vim下(还记得.vim这个路径吧)。然后,用vim打开程序源码,敲下命令:Tlist 打开列表,再输入一次关闭列表。
  
4、使用文件浏览器和窗口管理器WinManager
  
    在使用vim的过程中,你也许会碰到这样的情况:你本来想打开一个文件,但是错误的用vim打开了一个路径,这时候,居然没有返回错误信息,而是给出一个这个路径下的文件列表。这一功能实际上是由vim的文件浏览器插件netrw实现的。我们如何把这一功能应用到平时阅读海量源代码的过程中呢?如何将TagList窗口和netrw窗口整合起来呢?这时候,WinManager插件就派上用场了。
    
在 ~/.vim  目录下解压 winmanager.zip,然后在~/.vimrc中增加下面两句:
  
let g:winManagerWindowLayout='FileExplorer|TagList'
  
nmap wm :WMToggle<cr>
  
在vim的normal状态下输入"wm",即可发现很奇妙的分割串口画面。
  
5、配置cscope
  
    先安装吧,$ sudo apt-get install cscope。
  
然后在~/.vimrc中增加一句:
  
:set cscopequickfix=s-,c-,d-,i-,t-,e-
  
这步操作的目的是设定是否使用 quickfix 窗口来显示 cscope 的查询结果。
  
跟Ctags类似,要使用其功能必须先为你的代码生成一个cscope的数据库,在项目的根目录运行下面的命令:
  
$ cscope -Rbq
  
会生成三个文件:
  
-rw-rw-r-- 1 wooin wooin 1.1M 2007-09-30 10:56 cscope.in.out
  
-rw-rw-r-- 1 wooin wooin 6.7M 2007-09-30 10:56 cscope.out
  
-rw-rw-r-- 1 wooin wooin 5.1M 2007-09-30 10:56 cscope.po.out
  
这时候,你可以把下面这条命令写进~/.vimrc文件里面,以保证每次打开vim都会加载cscope数据库文件:
  
cs add /home/zhangxiaoqi/eclair_101206/cscope.out /home/zhangxiaoqi/eclair_101206/
  
上面这条指令的意思是让/home/zhangxiaoqi/eclair_101206/路径下的所有文件都有权访问/home/zhangxiaoqi/eclair_101206/cscope.out数据库文件。这一步操作是和ctag类似的(你可以回去看看ctags的配置)。
  
这时,你可以打开某一个源程序文件, 开始编辑。下面来做一个具体的操作, 查找函数good()的定义, 用命令:
  
:cs find g good
  

回复

使用道具 举报

 楼主| 发表于 2014-4-3 12:26:52 | 显示全部楼层
cb12345 发表于 2014-4-3 10:25
source insight 不是把vim完爆了?

关键SI只有win的版本,vim 不比SI 弱。
回复 支持 反对

使用道具 举报

发表于 2014-4-3 10:25:24 | 显示全部楼层
source insight 不是把vim完爆了?
回复 支持 反对

使用道具 举报

发表于 2014-3-31 16:01:02 | 显示全部楼层
vim裸奔者飘过
emacs一直想用,无奈学习成本太高.
回复 支持 反对

使用道具 举报

发表于 2014-2-6 12:53:23 | 显示全部楼层
ctags 太弱了。我很久就没用这个了,完全抛弃智能补全,写了这么久代码发现智能补全也没啥用。
我的 vim 配置:http://code.google.com/p/name5566-vim-config/
回复 支持 反对

使用道具 举报

发表于 2013-10-6 20:04:14 | 显示全部楼层
sudo apt-get install vim或者$ sudo apt-get install vim-gnome
回复 支持 反对

使用道具 举报

发表于 2013-7-20 13:22:05 | 显示全部楼层
个人感觉最有用的插件,莫过于nerdtree,ycm和powerline.
回复 支持 反对

使用道具 举报

发表于 2013-7-17 20:19:58 | 显示全部楼层
好帖,VIM一直没用熟
回复 支持 反对

使用道具 举报

发表于 2013-7-17 15:53:42 | 显示全部楼层
emacs用户也支持下~
回复 支持 反对

使用道具 举报

发表于 2013-7-15 16:41:58 | 显示全部楼层
求爆图,真
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-4-27 19:03 , Processed in 0.026114 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部