source insight是windows下的优秀编辑器,适合阅读管理代码,主要有以下功能:
(1)查找函数、变量或者宏的定义
(2)查找函数、变量或者宏的引用位置
(3)查找某个符号在工程内的所有匹配
由于unix哲学主张一个工具只做好一件事情,所以这里使用vim来阅读Linux源码
1.vim
#yum search vim //查看vim相关软件信息
#yum install -y vim* //在线安装vim
(1)~/.viminfo
在vim中操作的行为,vim会自动记录下来,保存在~/.viminfo文件中。这样为了方便下次处理,如:vim打开文件时,光标会自动在上次离开的位置显示。原来搜索过的字符中,重打开文件时自动显示。~/.viminfo文件是系统自动生成的。
(2)/etc/vimrc
vimrc文件是vim的环境设置文件。整体的vim的设置在/etc/vimrc文件中。不建议修改/etc/vimrc文件,每个用户可以在用户根目录设置vim,新建~/.vimrc 。
(3)~/.vimrc
2.ctags
ctags插件用来查找函数、变量或者宏的定义。在源文件目录下执行
ctags -R
会生成一个tags文件,里面包含了所有源文件的符号信息。在vim中,快捷键ctrl+]会跳到当前函数的定义处。如果项目有多层文件结构,一般只在根目录生成一个tag文件,那么子目录访问不到tag文件,一个方便的做法是在.vimrc中将tag加到tags查找路径中。
set tags+=/project1/tags
3.cscope
4.taglist
source insight左边是当前文件的所有符号窗口,包括include的头文件、函数和变量。这个功能可以由taglist实现。
5.NERDTree
source insight右边是文件列表窗口,显示了工程的所有文件名。NERDTree具有类似的功能,该插件可以显示当前目录下所有文件和目录,并方便地浏览和操作文件。
6.winmanager
为了像source insight一样同时显示多个窗口,需要winmanager插件。
7.MiniBufExplorer
写程序的时候肯定会多个源文件同时编辑,像source insight就有个window list,保存了最近打开过的所有源文件。
8.OmniCppComplete
大部分IDE都支持自动补全功能,vim作为linux下优秀的编辑器当然不缺少,不过vim自带的补全功能,ctrl+n,ctrl+p可以再当前源文件中实现简单的补全,OmniCppComplete利用了Ctags生成的tag数据库,实现了文件间名字补全,包括:
安全好后,输入ctrl+x ctrl+o就会补全当前名字,如果需要tab键达到这个补全功能,需要supertab插件。
9.surround
在编程时会遇到大量的匹对符号,如“,){”等等,高效地处理这些符号可以大大地提高编程效率,surround正是处理这些符号的非常 优秀的插件。
实践
1.建立索引
ctags -R
cscope-indexer -r
2.在vim中使用ctag
(1)跳转到指定的函数进入vim,用.tag func_name跳到func_name处。使用tag命令时,可以使用TAB键进行匹配查找,继续按TAB键向下切换。
(2)用ctrl+]快捷键,跳转到光标所在函数标识符的定义处理
(3)ctrl+T退回上层
3.在vim中使用cscope
其实是在cscope中使用vim,执行$cscope,选择想要打开的文件,输入前面序号即可在vim中打开它,之后就可以在vim中使用ctags快速在函数间跳来跳去。
ctrl+d退出cscope。