目录: 主目录下建立: .vim/doc .vim/plugin .vim/syntax -------------------------------------------------- 1 安装中文帮助 下载地址:http://vimcdoc.sourceforge.net/ 将解压后的doc目录内容复制到.vim/doc目录,此时帮助即可为中文。 跳转:将光标置于标签上然后输入 CTRL-]。 跳回:键入 CTRL-T 或 CTRL-O。 -------------------------------------------------- 2 语法高亮 插件下载地址:http://www.vim.org/scripts/script.php?script_id=234 将解压后的c.vim复制到.vim/syntax目录即可。 -------------------------------------------------- 3 浏览源码 插件下载地址:http://www.vim.org/scripts/script.php?script_id=273 将解压后的taglist.vim复制到.vim/plugin目录即可。 使用: a 在.vimrc中输入如下俩行: let Tlist_Show_One_File=1 let Tlist_Exit_OnlyWindow=1 b 用vim打开源代码文件,执行::Tlist 即可打开taglist窗口。 c 使用CTRL-w切换到taglist窗口,移动光标到标签,按回车跳转到定义处,按下空格键, 在下面的命令栏中显示声明。 -------------------------------------------------- 4 窗口管理 插件下载地址:http://www.vim.org/scripts/script.php?script_id=95 将解压后的 winfileexplorer.vim winmanager.vim wintagexplorer.vim 复制到.vim/plugin目录即可。 使用: a 在.vimrc中输入如下俩行: let g:winManagerWindowLayout='FileExplorer|TagList' nmap wm :WMToggle<cr> b 打开vim,在普通模式下输入wm,即可。 注意:其中到目录浏览插件netrw.vim已经是vim的默认插件了,不用安装。 使用:e ./src可以打开目录浏览插件,回车进入目录,-字符返回上级目录。 -------------------------------------------------- 5 转到定义 需要安装ctags软件。 下载地址:http://ctags.sourceforge.net 我是从ubuntu软件中心安装的:exuberant-ctags 1:5.9 使用: a 在源代码最上层目录运行:ctags -R 生成tags文件 b 用vim打开源代码文件,执行::set tags=.../tags 将tags文件加入到vim中来, 也可以将这句话放到.vimrc中去, 如果你经常在这个工程编程的话。 c 将光标放在函数,宏,结构上,按下CTRL-]即可跳转到定义处,键入 CTRL-T 或 CTRL-O返回。 测试发现全局变量可以跳转,但局部变量不行。 -------------------------------------------------- 6 自动补全 需要tags到支持。 在.vimrc中输入如下俩行: filetype plugin indent on " 加了这句才可以用智能补全 set completeopt=longest,menu " 关掉智能补全时的预览窗口 a 查看帮助: :help new-omni-completion b 函数变量宏等补全: 输入前几个字符到时候Ctrl-X Ctrl-O自动补全。 c 成员补全: 在.或->到后面按Ctrl-X Ctrl-O提示成员下拉选择。 d 下拉菜单选择: Ctrl+P 向前切换成员 Ctrl+N 向后切换成员 Ctrl+E 表示退出下拉窗口, 并退回到原来录入的文字 Ctrl+Y 表示退出下拉窗口, 并接受当前选项 -------------------------------------------------- 7 提示函数原形 插件下载地址:http://www.vim.org/scripts/script.php?script_id=1735 将解压后的echofunc.vim复制到.vim/plugin目录即可。 需要ctags的支持,先生成tags文件: ctags -R --fields=+lS 使用: 当你在vim插入模式下紧接着函数名后输入一个"("的时候, 这个函数的声明就会自动显示在命令行中。 如果这个函数有多个声明, 则可以通过按键"Alt+-"和"Alt+="向前和向后翻页。 不知到什么原因键"Alt+-"和"Alt+="向前和向后翻页不好用,将下面俩行放入.vimrc文件将翻页快捷键转换为CTRL-b和CTRL-n。 let g:EchoFuncKeyPrev='<C-b>' let g:EchoFuncKeyNext='<C-n>' -------------------------------------------------- 8 使用QuickFix窗口 a 查看帮助: :help quickfix b 调出QuickFix窗口: :cw c 关闭QuickFix窗口: :ccl 举例: :make :cw :ccl -------------------------------------------------- 9 使用cscope 需要安装cscope软件。 下载地址:http://cscope.sourceforge.net 我是从ubuntu软件中心安装的:cscope 15.7a-3.3 查看帮助: :help if_cscop.txt 使用: a 先在.vimrc中增加一句: set cscopequickfix=s-,c-,d-,i-,t-,e- 设定是否使用quickfix窗口来显示cscope结果。 b 在源代码最上层目录运行:cscope -Rbq 生成cscope的数据库。 c 打开vim后把刚才生成的cscope文件导入到vim中来, 用下面的命令: :cs add /home/wooin/vim71/cscope.out /home/wooin/vim71 必须写全, 不能只写前半句,因为源码是多级目录的, 如果只写前半句, cscope是无法在子目录中的源码中工作的。 如果你要经常用cscope的话, 可以把上面那句加到.vimrc中去. d find用法 :cs find {querytype} {name} {querytype}: 0 或 s: 查找本 C 符号 1 或 g: 查找本定义 2 或 d: 查找本函数调用的函数 3 或 c: 查找调用本函数的函数 4 或 t: 查找本字符串 6 或 e: 查找本 egrep 模式 7 或 f: 查找本文件 8 或 i: 查找包含本文件的文件 举例: 查找add函数的定义: :cs find g add 查找add函数在哪些地方被调用: :cs find c add 查找add函数调用到函数: :cs find d add 如果自动跳转的位置你不满意, 想看其他的结果, 可以用下面的命令打开QuickFix窗口: :cw e reset用法 :cs reset 重新初始化所有连接。 f show用法 :cs show 显示当前的连接。 g help用法 :cs help 显示简洁使用说明。 -------------------------------------------------- 10 代码折叠 在.vimrc中加入如下俩行: set foldmethod=syntax " 按语法高亮折叠 set foldlevel=100 " 启动vim时不要自动折叠代码 按照语法高亮来折叠代码, 其实就是按照代码中的一些括号来定义折叠位置, 比如: "{ }", "/* */". 使用: 在nomal模式下输入命令"za", 当前光标所在的最近的一层括号被折叠起来, 再输入一遍"za"命令, 这个折叠又打开了。 下面是常用的一些命令: za 打开/关闭当前折叠 zA 循环地打开/关闭当前折叠 zo 打开当前折叠 zc 关闭当前折叠 zM 关闭所有折叠 zR 打开所有折叠 -------------------------------------------------- 11 执行shell命令 vim普通模式中CTRL-Z切换到shell,shell中输入fg回到vim。 --------------------------------------------------
.vimrc文件示例:
:syntax enable " 打开语法高亮 :syn on " 打开语法高亮 :set nu! " 显示行号 :set ai! " 自动缩进 :set linebreak " 整词换行 :set tabstop=4 " 设置tab键的宽度 :set shiftwidth=4 " 换行时行间交错使用4个空格 :set showmatch " 设置匹配模式 :set smartindent " 智能对齐方式 :set autoindent " 自动对齐 :set mouse=a " 启用鼠标 " 浏览源码 :let Tlist_Show_One_File=1 :let Tlist_Exit_OnlyWindow=1 " 窗口管理 :let g:winManagerWindowLayout='FileExplorer|TagList' :nmap wm :WMToggle<cr> :let g:winManagerWidth = 40 " :let g:defaultExplorer = 0 " :let g:netrw_winsize = 50 " 自动补全 :filetype plugin indent on :set completeopt=longest,menu " 提示函数原形 :let g:EchoFuncKeyPrev='<C-b>' :let g:EchoFuncKeyNext='<C-n>' " 使用cscope :set cscopequickfix=s-,c-,d-,i-,t-,e- " 代码折叠 :set foldmethod=syntax :set foldlevel=100 " 特殊设置 " ------------------------------------------------ :let src_path = "/home/wuzhiguo/program/nginx/nginx-1.4.4/src/" :let src_path_tags = src_path . "tags" :let src_path_cscope = src_path . "cscope.out" :let command_tags = ":set tags=" . src_path_tags :let command_cscope = ":cs add " . src_path_cscope . " " . src_path :execute command_tags :execute command_cscope :set tags+=~/.vim/systags " ------------------------------------------------
在源代码根目录下建立如下command.sh脚本文件,在每次代码修改后执行该脚本自动生成tags和cscope文件,.vimrc文件中增加脚本使tags和cscope指向这些文件,重新启动Vim的时候就自动加载了。
#!/bin/sh src_path="/home/wuzhiguo/program/myproxy/src/" src_path_tags=$src_path"tags" src_path_cscope=$src_path"cscope.out" echo $src_path echo $src_path_tags echo $src_path_cscope ctags -R --fields=+lS -f $src_path_tags $src_path cscope -Rbq -f $src_path_cscope -P $src_path if [ ! -f ~/.vim/systags ] then ctags -R --fields=+lS -f ~/.vim/systags /usr/include /usr/local/include fiVim使用截图: