cd ~/workspace/Source_Insight/linux-2.6.27.39
ctags -R
gvim /drivers/serial/8250.c
gvim命令行中输入:
:set tags=/home/luzhonghui/workspace/Source_Insight/linux-2.6.27.39/tags
该命令将tags文件加入到vim中来,你也可以将这句话放到~/.vimrc中去(去掉前边的:就好), 如果你经常在这个工程编程的话.
将光标定位到8250.c中的任意一个函数,如map_8250_in_reg( )上,按下ctrl+],此时光标会自动跳到该函数的定义处;
按下ctrl+T,跳回到刚才的函数;
变量, 结构, 宏, 等等, 都可以的;
不过还有一个小瑕疵, 你修改程序后, 比如增加了函数定义, 删除了变量定义, tags文件不能自动rebuild, 你必须手动再运行一下命令:ctags -R
使tags文件更新一下, 不过让人感到欣慰的是vim不用重新启动, 正在编写的程序也不用退出, 马上就可以又正确使用<C-]>和<C-T>了。
2.Taglist
TagList最基本也是最常用的操作:
将光标定位到左边Tag List窗口中的的某一个结构体、变量或者函数上,按下Enter,会自动跳转到其定义处;
如果还不想让源码跳转,但是想看看该tag在源码中完整的表达,可以将光标移到你想要看的tag上,然后按下空格键,在下面的命令栏中,会显示该tag在源码中完整的写法, 而不会跳转到源码处;
3.Winmanager(文件浏览器和窗口管理器)
通过WinManager插件来将TagList窗口和netrw窗口整合起来
netrw窗口:当光标停在某个文件或文件夹的时候, 按下回车, 可以打开该文件或文件夹;
打开~/vim71/src/main.c, 在normal状态下输入"wm"
其中左上边是netrw窗口, 左下边是TagList窗口, 当再次输入"wm"命令时(注意:还是要在normal状态下)这两个窗口又关闭了;
4.cscope的使用
跟Ctags一样, 要使用其功能必须先为你的代码生成一个cscope的数据库, 在项目的根目录(本例中为:/home/luzhonghui/workspace/Source_Insight/linux-2.6.27.39)运行下面的命令:
cscope -Rbq
此时,会生成三个文件:cscope.po.out,cscope.in.out,cscope.out
进入vim后第一件事是要把刚才生成的cscope文件导入到vim中来, 用下面的命令:
:cs add /home/luzhonghui/workspace/Source_insight/linux-2.6.27.39/cscope.out /home/luzhonghui/workspace/Source_insight/linux-2.6.27.39/
上面这条命令很重要, 必须写全, 不能只写前半句:
:cs add /home/luzhonghui/workspace/Source_insight/linux-2.6.27.39/cscope.out
因为源码是多级目录的, 如果这样写, cscope是无法在子目录中的源码中工作的, 当然, 如果你的源码都在同一级目录中就无所谓了.
如果你要经常用cscope的话, 可以把上面那句加到~/.vimrc中去.
cs find g serial_icr_write
按下回车后会自动跳转到serial_icr_write()的定义处
查找vim_strsave()到底在那些地方被调用过了, 用命令:
:cs find c serial_icr_write
按下回车后vim会自动跳转到第一个符合要求的地方, 并且在命令栏显示有多少符合要求的结果
如果自动跳转的位置你不满意, 想看其他的结果, 可以用下面的命令打开QuickFix窗口:
:cw
在下面的QuickFix窗口中我们可以找到每一个编译错误, 同样你可以用鼠标点击每一条记录, 代码会马上自动跳转到错误处, 你还可以F6,F7进行跳转:
当光标停在某个你要查找的词上时, 按下<C-_>g, 就是查找该对象的定义, 其他的同理.
按这种组合键有一点技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪就回到nomal状态了
<C-_>g的按法是先按"Ctrl+Shift+-", 然后很快再按"g"
经常用到的还有<C-_>c,查找调用本函数的函数
0 或 s 查找本 C 符号(可以跳过注释)
1 或 g 查找本定义
2 或 d 查找本函数调用的函数
3 或 c 查找调用本函数的函数
4 或 t 查找本字符串
6 或 e 查找本 egrep 模式
7 或 f 查找本文件
8 或 i 查找包含本文件的文件
5.MiniBufExplorer (快速浏览和操作Buffer)
在编程的时候不可能永远只编辑一个文件, 你肯定会打开很多源文件进行编辑, 如果每个文件都打开一个vim进行编辑的话那操作起来将是多麻烦啊, 所以vim有buffer(缓冲区)的概念,
<C-Tab> 向前循环切换到每个buffer上,并在但前窗口打开
<C-S-Tab> 向后循环切换到每个buffer上,并在但前窗口打开
6.插件A(c/h文件间相互切换)
作为一个C程序员, 日常Coding时在源文件与头文件间进行切换是再平常不过的事了, 直接用vim打开其源/头文件其实也不是什么麻烦事, 但是只用一个按键就切换过来了, 这是多么贴心的功能啊....
按F12时在一个新的buffer中打开c/h文件, 这样在写程序的时候就可以不假思索地在c/h文件间进行切换, 减少了按键的次数
7.Grep(在工程中查找)
按下F3, 对光标所在的词来个全工程范围的grep
比如将光标移动到serial_outp,按下F3,在最下面的命令行会显示:
Search for pattern:serial_outp
此时你还可以编辑该行, grep支持正则表达式, 你想全词匹配的话可以改成:
Search for pattern:/<serial_outp/>
然后按下回车,在最下面的命令行会显示:
Search in files:*
是问你搜索范围, 默认是该目录下的所有文件, 此时你还可以编辑该行, 比如你只想搜索源码文件:
Search in files:*.c *.h
然后在按下回车, 会在弹出的QuickFix窗口中列出所有符合条件的搜索结果, 你可以在其中查找你想要的结果;
8.自动补全
随便找一个有成员变量的对象, 比如"parmp", 进入Insert模式, 将光标放在"->"后面,
然后按下"Ctrl+X Ctrl+O", 此时会弹出一个下列菜单, 显示所有匹配的标签。
此时有一些快捷键可以用:
| Ctrl+P | 向前切换成员 |
| Ctrl+N | 向后切换成员 |
| Ctrl+E | 表示退出下拉窗口, 并退回到原来录入的文字 |
| Ctrl+Y | 表示退出下拉窗口, 并接受当前选项 |
如果你增加了一些成员变量, 全能补全还不能马上将新成员补全, 需要你重新生成一下tags文件, 但是你不用重启vim, 只是重新生成一下tags文件就行了, 这时全能补全已经可以自动补全了, 还真够"全能"吧.
补充:
vim编程常用命令
| % | 跳转到配对的括号去 |
| [[ | 跳转到代码块的开头去(但要求代码块中'{'必须单独占一行) |
| gD | 跳转到局部变量的定义处 |
| '' | 跳转到光标上次停靠的地方, 是两个', 而不是一个" |
| mx | 设置书签,x只能是a-z的26个字母 |
| `x | 跳转到书签处("`"是1左边的键) |
| > | 增加缩进,"x>"表示增加以下x行的缩进 |
| < | 减少缩进,"x<"表示减少以下x行的缩进 |
301

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



