1.ctags的使用
tags指的是函数, 类, 结构体,变量等
cd /home/luzhonghui/vim71
ctags -R //会在vim71路径下生成一个ctags文件
vim /home/luzhonghui/vim71/src/main.c
在vim中运行命令:set tags=/home/luzhonghui/vim71/tags
该命令将tags文件加入到vim中来
将光标定位到main.c中的任意一个函数,如setmouse( )上,按下ctrl+],此时光标会自动跳到该函数的定义处;
按下ctrl+T,跳回到刚才的函数;
变量, 结构, 宏, 等等, 都可以的;
不过还有一个小瑕疵, 你修改程序后, 比如增加了函数定义, 删除了变量定义, tags文件不能自动rebuild, 你必须手动再运行一下命令:ctags -R
使tags文件更新一下, 不过让人感到欣慰的是vim不用重新启动, 正在编写的程序也不用退出, 马上就可以又正确使用<C-]>和<C-T>了.
2.Taglist
特点:
在Vim的一个垂直或水平的分割窗口中显示一个文件中定义的tags(函数, 类, 结构,变量, 等);
当你在taglist窗口中选中一个tag名时, 源文件中的光标会自动跳转到该tag的定义处;
在控制台vim和GUI vim中都可以使用;
可以和winmanager插件一起使用. winmanager插件可以让你同时使用文件浏览器,缓冲区浏览器和taglist插件, 就像一个IDE一样;
vim /home/luzhonghui/vim71/src/main.c
进入vim后,用下面的命令打开Taglist窗口:Tlist
TagList最基本也是最常用的操作:
将光标定位到左边Tag List窗口中的的某一个结构体、变量或者函数上,按下Enter,会自动跳转到其定义处;
如果还不想让源码跳转,但是想看看该tag在源码中完整的表达,可以将光标移到你想要看的tag上,然后按下空格键,在下面的命令栏中,会显示该tag在源码中完整的写法, 而不会跳转到源码处;
注:如果在命令行下输入:Tlist,无反应,可能是需要更新tag文件,回到源码顶层,输入:ctags -R,更新下tag文件,再vim打开某个.c文件,输入:Tlist
3.Winmanager(文件浏览器和窗口管理器)
通过WinManager插件来将TagList窗口和netrw窗口整合起来
netrw窗口:当光标停在某个文件或文件夹的时候, 按下回车, 可以打开该文件或文件夹;
进入"~/vim71"文件夹后运行vim, 然后在vim中运行命令:
e ~/vim71
打开~/vim71/src/main.c, 在normal状态下输入"wm"
其中左上边是netrw窗口, 左下边是TagList窗口, 当再次输入"wm"命令时(注意:还是要在normal状态下)这两个窗口又关闭了;
4.cscope的使用
特点:
无须在厚厚的程序清单中翻来翻去就可以认识一个 C 程序的工作原理;
无须熟悉整个程序就可以知道清楚程序 bug 所要修改的代码位置;
在所有相关的源文件中对一个全局变量改名;
在所有相关的位置将一个常数改为一个预处理符号;
它被设计用来回答以下的问题:
* 什么地方用到了这个符号?
* 这是在什么地方定义的?
* 这个变量在哪里被赋值?
* 这个全局符号的定义在哪里?
* 这个函数在源文件中的哪个地方?
* 哪些函数调用了这个函数?
* 这个函数调用了哪些函数?
* 信息 "out of space" 从哪来?
* 这个源文件在整个目录结构中处于什么位置?
* 哪些文件包含这个头文件?
跟Ctags一样, 要使用其功能必须先为你的代码生成一个cscope的数据库, 在项目的根目录运行下面的命令:
| $ cd /home/wooin/vim71/ $ cscope -Rbq # 此后会生成三个文件 $ ll cscope.* -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 # 打开文件, 开始Coding $ cd src $ vi main.c |
| :cs add /home/wooin/vim71/cscope.out /home/wooin/vim71 |
:cs add /home/wooin/vim71/cscope.out
因为源码是多级目录的, 如果这样写, cscope是无法在子目录中的源码中工作的, 当然, 如果你的源码都在同一级目录中就无所谓了. 如果你要经常用cscope的话, 可以把上面那句加到~/.vimrc中去.
查找函数vim_strsave()的定义, 用命令:
:cs find g vim_strsave
按下回车后会自动跳转到vim_strsave()的定义处. 此时你肯定会说Ctags也可以做到这个呀, 那么下面说的这个Ctags就无法做到了, 我想查找vim_strsave()到底在那些地方被调用过了, 用命令:
| :cs find c vim_strsave |
如果自动跳转的位置你不满意, 想看其他的结果, 可以用下面的命令打开QuickFix窗口:
:cw
cscope的主要功能是通过同的子命令"find"来实现的
"cscope find"的用法:
cs find c|d|e|f|g|i|s|t name
| 0 或 s | 查找本 C 符号(可以跳过注释) |
| 1 或 g | 查找本定义 |
| 2 或 d | 查找本函数调用的函数 |
| 3 或 c | 查找调用本函数的函数 |
| 4 或 t | 查找本字符串 |
| 6 或 e | 查找本 egrep 模式 |
| 7 或 f | 查找本文件 |
| 8 或 i | 查找包含本文件的文件 |
当光标停在某个你要查找的词上时, 按下<C-_>g, 就是查找该对象的定义, 其他的同理.
按这种组合键有一点技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪就回到nomal状态了
<C-_>g的按法是先按"Ctrl+Shift+-", 然后很快再按"g"
5.QuickFix窗口
用下面的命令调出QuickFix窗口:
:cw
在下面的QuickFix窗口中我们可以找到每一个编译错误, 同样你可以用鼠标点击每一条记录, 代码会马上自动跳转到错误处, 你还可以用下面的命令来跳转:
| :cn
// 切换到下一个结果 :cp // 切换到上一个结果 |
nmap <F6> :cn<cr>
nmap <F7> :cp<cr>
6.MiniBufExplorer(快速浏览和操作Buffer)
在编程的时候不可能永远只编辑一个文件, 你肯定会打开很多源文件进行编辑, 如果每个文件都打开一个vim进行编辑的话那操作起来将是多麻烦啊, 所以vim有buffer(缓冲区)的概念,
7.插件A(c/h文件间相互切换)
按F12时在一个新的buffer中打开c/h文件, 这样在写程序的时候就可以不假思索地在c/h文件间进行切换, 减少了按键的次数
8.Grep(在工程中查找 -- 插件)
F3
9.Visual Mark(高亮的书签)
如果是gvim, 直接在代码上按下Ctrl+F2, 如果是vim, 用"mm",会发现光标所在的行变高亮了;
10.自动补全
随便找一个有成员变量的对象, 比如"parmp", 进入Insert模式, 将光标放在"->"后面,
然后按下"Ctrl+X Ctrl+O", 此时会弹出一个下列菜单, 显示所有匹配的标签;
如果你增加了一些成员变量, 全能补全还不能马上将新成员补全, 需要你重新生成一下tags文件, 但是你不用重启vim, 只是重新生成一下tags文件就行了, 这时全能补全已经可以自动补全了, 还真够"全能"吧.
11.
转自:http://blog.youkuaiyun.com/wooin/article/details/1858917
http://blog.youkuaiyun.com/wooin/article/details/2004470
本文详细介绍了 Vim 编程环境中的各种实用工具和技术,包括 ctags、Taglist、Winmanager、cscope 等,以及如何在 Vim 中高效地进行代码导航、搜索与管理。
1100

被折叠的 条评论
为什么被折叠?



