1.语法高亮
在 .vimrc文件中添加
syntax enable
syntax on
colorscheme desert
2.Ctags的使用
果你在读程序时看了一个函数调用, 或者一个变量, 或者一个宏等等, 你想知道它们的定义在哪儿,当光标在某个函数或变量上时,
按下"Ctrl+]", 光标会自动跳转到其定义处。
用下面的命令解压安装:
$ tar -xzvf ctags-5.6.tar.gz $ cd ctags-5.6 $ make # make install // 需要root权限 |
然后去你的源码目录, 如果你的源码是多层的目录, 就去最上层的目录, 在该目录下运行命令: ctags -R
我现在以 vim71 的源码目录做演示
此时在/home/wooin/vim71目录下会生成一个 tags 文件, 现在用vim打开 /home/wooin/vim71/src/main.c
再在vim中运行命令:
我现在以 vim71 的源码目录做演示
$ cd /home/wooin/vim71 $ ctags -R |
$ vim /home/wooin/vim71/src/main.c |
:set tags=/home/wooin/vim71/tags |
不过还有一个小瑕疵, 你修改程序后, 比如增加了函数定义, 删除了变量定义, tags文件不能自动rebuild, 你必须手动再运行一下命令:
$ ctags -R |
3. 插件: TagList
下载地址 | http://www.vim.org/scripts/script.php?script_id=273
|
在Windows平台上用过Source Insight看程序的人肯定很熟悉代码窗口左边那个Symbol窗口, 那里面列出了当前文件中的所有宏, 全局变量, 函数名等, 在查看代码时用这个窗口总揽全局,
首先请先在你的~/.vimrc文件中添加下面两句:
let Tlist_Show_One_File=1 let Tlist_Exit_OnlyWindow=1 |
此时用vim打开一个c源文件试试:
进入vim后用下面的命令打开taglist窗口, 如图5:
$ vim ~/vim/src/main.c |
:Tlist |
4.文件浏览器和窗口管理器 -- 插件: WinManager
下载地址 | http://www.vim.org/scripts/script.php?script_id=95 |
版本 | 2.x |
安装 | 在 ~/.vim 目录下解压winmanager.zip |
手册 | :help winmanager |
现在在你的~/.vimrc中增加下面两句
let g:winManagerWindowLayout='FileExplorer|TagList' nmap wm :WMToggle<cr> |
然后重启vim, 打开~/vim71/src/main.c, 在normal状态下输入"wm",
5.Cscope 的使用
Cscope 是一个交互式的屏幕下使用的工具
它被设计用来回答以下的问题:
* 什么地方用到了这个符号?
* 这是在什么地方定义的?
* 这个变量在哪里被赋值?
* 这个全局符号的定义在哪里?
* 这个函数在源文件中的哪个地方?
* 哪些函数调用了这个函数?
* 这个函数调用了哪些函数?
* 信息 "out of space" 从哪来?
* 这个源文件在整个目录结构中处于什么位置?
* 哪些文件包含这个头文件?
* 什么地方用到了这个符号?
* 这是在什么地方定义的?
* 这个变量在哪里被赋值?
* 这个全局符号的定义在哪里?
* 这个函数在源文件中的哪个地方?
* 哪些函数调用了这个函数?
* 这个函数调用了哪些函数?
* 信息 "out of space" 从哪来?
* 这个源文件在整个目录结构中处于什么位置?
* 哪些文件包含这个头文件?
安装Cscope:
如果你的系统中有cscope命令, 则可以跳过这一小段, 如果没有, 就先跟着我一起安装一个吧.
在Cscope的主页: http://cscope.sourceforge.net 下载一个源码包, 解压后编译安装:
先在~/vimrc中增加一句:
这个是设定是否使用 quickfix 窗口来显示 cscope 结果
如果你的系统中有cscope命令, 则可以跳过这一小段, 如果没有, 就先跟着我一起安装一个吧.
在Cscope的主页: http://cscope.sourceforge.net 下载一个源码包, 解压后编译安装:
# ./configure # make # make install // 需要root权限 |
先在~/vimrc中增加一句:
:set cscopequickfix=s-,c-,d-,i-,t-,e- |
运行下面的命令:
进入vim后第一件事是要把刚才生成的cscope文件导入到vim中来, 用下面的命令:
$ 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 |
可以用下面的命令打开QuickFix窗口:
cscope的主要功能是通过同的子命令"find"来实现的
"cscope find"的用法:
cs find c|d|e|f|g|i|s|t name
:cw + ENTER |
"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 | 查找包含本文件的文件 |
如果每次查找都要输入一长串命令的话还真是件讨人厌的事情, Cscope的帮助手册中推荐了一些快捷键的用法, 下面是其中一组, 也是我用的, 将下面的内容添加到~/.vimrc中, 并重启vim:
let mapleader=","
当光标停在某个你要查找的词上时, 按下<C-_>g, 就是查找该对象的定义, 其他的同理.
按这种组合键有一点技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪就回到nomal状态了
< Leader > g的按法是先按",+g"
nmap <Leader>s :cs find s <C-R>=expand("<cword>")<CR><CR>:c w<cr> nmap < Leader >g :cs find g <C-R>=expand("<cword>")<CR><CR>:cw<cr> nmap < Leader >c :cs find c <C-R>=expand("<cword>")<CR><CR>:cw<cr> nmap < Leader >t :cs find t <C-R>=expand("<cword>")<CR><CR>:cw<cr> nmap < Leader >e :cs find e <C-R>=expand("<cword>")<CR><CR>:cw<cr> nmap < Leader >f :cs find f <C-R>=expand("<cfile>")<CR><CR>:cw<cr> nmap < Leader >i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>:cw<cr> nmap < Leader >d :cs find d <C-R>=expand("<cword>")<CR><CR>:cw<cr> |
按这种组合键有一点技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪就回到nomal状态了
< Leader > g的按法是先按",+g"
6.快速浏览和操作Buffer -- 插件: MiniBufExplorer
下载地址 | http://www.vim.org/scripts/script.php?script_id=159 |
版本 | 6.3.2 |
安装 | 将下载的 minibufexpl.vim文件丢到 ~/.vim/plugin 文件夹中即可 |
手册 | 在minibufexpl.vim 文件的头部 |
在编程的时候不可能永远只编辑一个文件, 你肯定会打开很多源文件进行编辑, 如果每个文件都打开一个vim进行编辑的话那操作起来将是多麻烦啊, 所以vim有buffer(缓冲区)的概念,
使用方法:
重新启动vim, 当你只编辑一个buffer的时候MiniBufExplorer派不上用场, 当你打开第二个buffer的时候, MiniBufExplorer窗口就自动弹出来了, 见下图:
(--- 图13 ---)
上面那个狭长的窗口就是MiniBufExplorer窗口, 其中列出了当前所有已经打开的buffer, 当你把光标置于这个窗口时, 有下面几个快捷键可以用:
以下的两个功能需要在~/.vimrc中增加:
如果在~/.vimrc中设置了下面这句:
则可以用<C-h,j,k,l>切换到上下左右的窗口中去,就像:
C-w,h j k l 向"左,下,上,右"切换窗口.
在~/.vimrc中设置:
是用<C-箭头键>切换到上下左右窗口中去
重新启动vim, 当你只编辑一个buffer的时候MiniBufExplorer派不上用场, 当你打开第二个buffer的时候, MiniBufExplorer窗口就自动弹出来了, 见下图:
(--- 图13 ---)
上面那个狭长的窗口就是MiniBufExplorer窗口, 其中列出了当前所有已经打开的buffer, 当你把光标置于这个窗口时, 有下面几个快捷键可以用:
<Tab> | 向前循环切换到每个buffer名上 |
<S-Tab> | 向后循环切换到每个buffer名上 |
<Enter> | 在打开光标所在的buffer |
d | 删除光标所在的buffer |
以下的两个功能需要在~/.vimrc中增加:
let g:miniBufExplMapCTabSwitchBufs = 1 |
<C-Tab> | 向前循环切换到每个buffer上,并在但前窗口打开 |
<C-S-Tab> | 向后循环切换到每个buffer上,并在但前窗口打开 |
如果在~/.vimrc中设置了下面这句:
let g:miniBufExplMapWindowNavVim = 1 |
C-w,h j k l 向"左,下,上,右"切换窗口.
在~/.vimrc中设置:
let g:miniBufExplMapWindowNavArrows = 1 |
7. c/h文件间相互切换 -- 插件: A
下载地址 | http://www.vim.org/scripts/script.php?script_id=31 |
版本 | |
安装 | 将a.vim 放到 ~/.vim/plugin 文件夹中 |
手册 | 无 |
安装好a.vim后有下面的几个命令可以用了:
其他还有一些命令, 你可以在它的网页上看看, 我都没用过, 其实也都是大同小异, 找到自己最顺手的就行了.
我在~/.vimrc中增加了一句:
意思是按F12时在一个新的buffer中打开c/h文件, 这样在写程序的时候就可以不假思索地在c/h文件间进行切换, 减少了按键的次数, 思路也就更流畅了, 阿弥陀佛....
:A | 在新Buffer中切换到c/h文件 |
:AS | 横向分割窗口并打开c/h文件 |
:AV | 纵向分割窗口并打开c/h文件 |
:AT | 新建一个标签页并打开c/h文件 |
我在~/.vimrc中增加了一句:
nnoremap <silent> <F12> :A<CR> |
8.Grep插件
下载地址 | http://www.vim.org/scripts/script.php?script_id=311 |
版本 | 1.8 |
安装 | 把grep.vim 文件丢到 ~/.vim/plugin 文件夹就好了 |
手册 | 在grep.vim 文件头部 |
vim有自己的查找功能, 但是跟shell中的grep比起来还是有些差距的, 有时Coding正火急火燎的时候, 真想按下F3, 对光标所在的词来个全工程范围的grep, 不用敲那些繁琐的命令, 现在福音来了, 跟我同样懒的人不在少数, 在grep.vim脚本的前部可以找到一些说明文档:
:Grep | 按照指定的规则在指定的文件中查找 |
:Rgrep | 同上, 但是是递归的grep |
:GrepBuffer | 在所有打开的缓冲区中查找 |
:Bgrep | 同上 |
:GrepArgs | 在vim的argument filenames (:args)中查找 |
:Fgrep | 运行fgrep |
:Rfgrep | 运行递归的fgrep |
:Egrep | 运行egrep |
:Regrep | 运行递归的egrep |
:Agrep | 运行agrep |
:Ragrep | 运行递归的agrep |
但是我从来都不用敲上面那些命令的^_^, 因为我在~/.vimrc中增加了下面这句:
比如你想在/home/wooin/vim71/src/main.c中查找"FEAT_QUICKFIX", 则将光标移到"FEAT_QUICKFIX"上, 然后按下F3键,
nnoremap <silent> <F3> :Grep<CR> |
在最下面的命令行会显示:
此时你还可以编辑该行, grep支持正则表达式, 你想全词匹配的话可以改成:
然后按下回车:
Search for pattern: FEAT_QUICKFIX |
Search for pattern: /<FEAT_QUICKFIX/> |
在最下面的命令行会显示:
是问你搜索范围, 默认是该目录下的所有文件, 此时你还可以编辑该行, 比如你只想搜索源码文件:
然后在按下回车, 会在弹出的QuickFix窗口中列出所有符合条件的搜索结果, 你可以在其中查找你想要的结果
Search in files: * |
Search in files: *.c *.h |
9.自动补全