Linux下的IDE集成开发环境VIM,除了基本的Vim外,还包括 Ctags,MRU,Taglist,Cscope,SuperTab,OmniCppComplete,Winmanager,NERDTree和 MiniBufExplorer等组件.
插件--vim 帮助文档中文版(帮助命令:help/:help usr_29/:help usr_30)
1.下载中文语言包:vimcdoc-1.8.0.tar.gz
http://sourceforge.net/projects/vimcdoc/files/vimcdoc/
2.解压tar zxvf vimcdoc-1.8.0.tar.gz
a.在Linux下,将其中doc文件夹全部复制到~/.vim/doc中;
b.在Windows下,将其中doc文件夹全部复制到vim安装目录下的doc目录中(比如:D:\Program Files\Vim\vim73)。
3.注意:
a. 如果无法显示中文,在~/.vimrc中增加下面这句试试:
set helplang=cn
b. 帮助文件的文本是utf-8编码的,如果想用vim直接查看,需要在~/.vimrc中设置:
set encoding=utf-8 (如果在windows下面出现右键乱码,则改为gbk即可)
4.键入:help即可看见中文注释了
插件--最近访问的文件列表(帮助命令:在终端中打开mru.vim文件)
1.下载mru.vim
http://www.vim.org/scripts/script.php?script_id=521
在linux下,将mru.vim 复制到 ~/.vim/plugin目录
在Windows下,将mru.vim 复制到wim安装目录的plugin下(比如:D:\Program Files\Vim\vim73\plugin).
2.重启vim就可以了
3.调用命令:
:MRU(必须大写)
其他设置
"记录历史文件的位置
let MRU_File=$VIM.'\Data\mru_files.txt'
"记录的条数
let MRU_Max_Entries=50
"分割窗口的大小
let MRU_Window_Height=10
"选择文件后打开此窗口自动关闭
let MRU_Auto_Close=1
"简化:,h 打开MRU
map <silent> <leader>h :MRU<CR>
插件--ctags(帮助命令:)
1.下载ctags:
http://ctags.sourceforge.net/
Linux下载:ctags-5.8.tar.gz
Windows下载:ctags-5.8.zip
2.安装
Linux下:
用下面的命令解压安装:
$ tar -xzvf ctags-5.8.tar.gz
$ cd ctags-5.8
$ make
# make install // root权限
Windows下:
拷贝ctags-5.8.zip中的ctags.exe到安装目录下,比如我的目录是:D:\Program Files\Vim\vim73 ;同时将ctags.exe还拷贝一份到 C:/windows/system32/
3.添加如下两行到_vimrc文件中:
set tags=tags;
set autochdir
(注意第一个命令里的分号是必不可少的.这个命令让vim首先在当前目录里寻找tags文件,如果没有找到tags文件,或者没有找到对应的目标,就到父目录中查找,一直向上递归.因为tags文件中记录的路径总是相对于tags文件所在的路径,所以要使用第二个设置项来改变vim的当前目录.)
4.在源代码根目录生成ctags文件
Linux下,到源码目录(如果你的源码是多层的目录,就去最上层的目录,即源代码根目录),在该目录下运行命令: ctags -R
Windows下,在按下win + R,键入cmd,打开dos窗口,同样到该源代码根目录下运行: ctags -R
再在vim中运行命令:
:set tags=源代码根目录/tags
5.小瑕疵
增加了函数定义,删除了变量定义,tags文件不会自动rebuild,你必须手动再运行一下命令: ctags -R 使tags文件更新一下,不用重新启动vim,正在编写的程序也不用退出
6.使用ctags
<C-]>(即Ctrl+]): 查看定义
<C-T>(即Ctrl+t/T): 返回原位置
插件--Tlist(帮助命令:help taglist.txt)
1.下载taglist_45.zip
http://www.vim.org/scripts/script.php?script_id=273
2.解压taglist_45.zip,得到得到的doc和plugin两个文件夹
Linux下:unzip taglist_45.zip
Windows下:用winrar解压
3.安装
Linux下:将得到的doc和plugin目录拷贝合并到~/.vim 目录中的doc和plugin目录
Windows下:将得到的doc和plugin目录拷贝合并到vim安装目录下的doc和plugin目录(比如:D:\Program Files\Vim\vim73)
4.配置~/.vimrc文件
在该文件中添加下面两句:
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
5.进入vim后用下面的命令打开/关闭taglist窗口:
:Tlist
插件--cscope(帮助命令:help if_cscop.txt(if是接口的意思))
1.下载cscope-15.8a.tar.gz
http://cscope.sourceforge.net
2.解压cscope-15.8a.tar.gz
Linux下:tar zxvf cscope-15.8a.tar.gz
Windows下:用winrar解压
3.安装
Linux下:
#./configure
# make (如果 make 时出现“curses.h not found”之类的错误,见后面附录中出错处理方法)
# make install // 需要root权限
Windows下:
将cscope-15.8a文件夹添加到环境变量,可运行 cscope -V 查看版本(待验证)
4.生成cscope数据库文件
在源代码根目录运行命令:cscope -Rbq
-R 表示递归地把所有子文件夹中的 source file 也关联进来
-b 表示只建立数据库文件 cscope.out,不进入 Cscope 的 GUI 界面
-q 会建立两个额外的 'inverted index' file: cscope.in.out 和 cscope.po.out,以加快查找的速度
如果不希望把 /usr/include 中被工程文件包含的 .h 文件关联进来,就加 -k
5.关联vim和cscope数据库文件
在vim中,输入命令:
:cs add 源代码根目录/cscope.out 源代码根目录
6.使用查找定义、调用、引用等命令
:cs f s MAX (查找MAX符号的使用情况,可以跳过注释)
:cs f g test (查找test函数的定义位置)
:cs f d test (查找test函数的调用情况)
:cs f c test (查找调用test函数的其他函数)
:cs f t test_func(查找全局可见test_func字符串)
:cs f f xtest (查找xtest文件名)
:cs f i xtest (查找包涵xtest文件名的文件)
7.更新代码后,执行如下3条代码:
终端中执行命令
:cscope -Rbq
vim命令行执行命令
:cs add 源代码根目录/cscope.out 源代码根目录
:cs reset
cscope的主要功能是通过同的子命令"find"来实现的
"cscope find"的用法:
:cs find|f 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:
nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR>
当光标停在某个你要查找的词上时,按下<C-_>g,就是查找该对象的定义,其他的同理.
按这种组合键有一点技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪就回到nomal状态了
<C-_>g的按法是先按"Ctrl+Shift+-",然后很快再按"g"
如果只希望 Cscope 关联起所有的 .c 文件,那么可以直接到工程的根目录下,输入:
$ cscope -Rbq
-R 表示递归地把所有子文件夹中的 source file 也关联进来
-b 表示只建立数据库文件 cscope.out,不进入 Cscope 的 GUI 界面
-q 会建立两个额外的 'inverted index' file: cscope.in.out 和 cscope.po.out,以加快查找的速度
如果不希望把 /usr/include 中被工程文件包含的 .h 文件关联进来,就加 -k
如果要关联其他类型的文件(如 .cpp、.java等),就需要我们自己先生成一个 cscope.files,把所有我们希望关联进去的文件都列在里面:
$ find /home/edelweiss/nbd/nbd-2.9.15/ -name '*.c' -o -name '*.cpp' -o -name '*.h' /
> /home/edelweiss/cscope.files
注意查找的路径一定要写成绝对路径,这样才能保证写入到 cscope.files 文件中的也是绝对路径.
之后就可以根据 cscope.files 建立数据库了:
$ cscope -bq -i /home/edelweiss/cscope.files
如果生成数据库文件后,工程中的代码有所改动,最好重新生成一次那三个文件,否则查找結果可能与实际不匹配.
使用方法
查看代码时常用的快捷键是 Ctrl+/ s(按住 Ctrl 不放,同时按 /,然后全部松开,按 s).将光标放到想要查看所有出现位置的 C Symbol 上,按下上述快捷键,屏幕下方就会出现一个列表,输入序号并回车就能到达想去的地方.按下 Ctrl+t 可回到搜索前的位置.
直接在命令行查找可输入 “:cs f s symbol_name”
其他用法可以输入 “:cs” 查看或者参阅 manpage 和官网上的 Vim/Cscope Tutorial.
附录:
make 时出现“curses.h not found”之类的错误
错误信息如下
make[2]: 正在进入目录 `/home/Usr/cscope-15.7a/src'
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -MT build.o -MD -MP -MF ".deps/build.Tpo" -c -o build.o build.c; \
then mv -f ".deps/build.Tpo" ".deps/build.Po"; else rm -f ".deps/build.Tpo"; exit 1; fi
build.c:52: fatal error: curses.h: 没有那个文件或目录 ...
原因:需要先安装“libncurses-dev”包
sudo apt-get install libncurses-dev
然后返回安装目录
make clean
make distclean
再make
插件--QuickFix窗口(帮助命令:help quickfix)
编译出错时,QuickFix会把出错的信息列出来,供我们一条条地查看和修改. 首先还是用vim打开~/vim71/src/main.c,事先最好先编译过vim71,否则一会儿编译的时候有点慢,或者你也可以自己写一个小的有错误的程序来跟着我做下面的步骤.
我们修改一下main.c,人为地造成几处错误,在第1019行增加了一个baobao_wu的没有任何定义的字符串,删除了第1020行最后的一个括号")",然后用下面的命令进行编译:
:make 显然编译会报很多错误,当编译结束并退出到源码界面时,刚才编译器报的错误都已经看不到了,但是我们可以用QuickFix窗口再将错误信息找出来,用下面的命令调出QuickFix窗口:
:cw
在下面的QuickFix窗口中我们可以找到每一个编译错误,同样你可以用鼠标点击每一条记录,代码会马上自动跳转到错误处,你还可以用下面的命令来跳转:
:cn // 切换到下一个结果
:cp // 切换到上一个结果
如果你经常使用这两个命令,你还可以给他们设定快捷键,比如在~/.vimrc中增加:
nmap <F6> :cn<cr>
nmap <F7> :cp<cr>
插件--MiniBufExplorer: 快速浏览和操作Buffer(帮助命令:help buffer)
vim自带的buffer管理工具只有:ls,:bnext,:bdelete 等的命令,既不好用,又不直观.
1.下载 minibufexpl.vim
http://www.vim.org/scripts/script.php?script_id=159
2.安装
Linux下: 将 minibufexpl.vim复制到~/.vim/plugin文件夹中
Windows下:将 minibufexpl.vim复制到vim安装目录下的plugin文件夹中
使用方法:
重新启动vim,当你只编辑一个buffer的时候MiniBufExplorer派不上用场,当你打开第二个buffer的时候,MiniBufExplorer窗口就自动弹出来了,默认或许就可以直接用大家喜欢的Ctrl+Tab/Ctrl+Shift+Tab来切换文件选项卡.
那个狭长的窗口就是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-h,j,k,l>切换到上下左右的窗口中去,就像:
C-w,h j k l 向"左,下,上,右"切换窗口.
在~/.vimrc中设置:
let g:miniBufExplMapWindowNavArrows = 1 是用<C-箭头键>切换到上下左右窗口中去
插件--A: c/h文件之间(源文件src和头文件header之间)相互切换
1.下载 a.vim
http://www.vim.org/scripts/script.php?script_id=31
2.安装
Linux下: 将 a.vim复制到~/.vim/plugin文件夹中
Windows下:将 a.vim复制到vim安装目录下的plugin文件夹中
日常Coding时在源文件与头文件间进行切换是再平常不过的事了,只用一个按键就切换过来了,这是多么贴心的功能啊....
安装好a.vim后有下面的几个命令可以用了:
:A 在新Buffer中切换到c/h文件
:AS 横向分割窗口并打开c/h文件
:AV 纵向分割窗口并打开c/h文件
:AT 新建一个标签页并打开c/h文件 其他还有一些命令,你可以在它的网页上看看,我都没用过,其实也都是大同小异,找到自己最顺手的就行了.
我在~/.vimrc中增加了一句:(强烈推荐)
nnoremap <silent> <F12> :A<CR>
意思是按F12时在一个新的buffer中打开c/h文件,这样在写程序的时候就可以不假思索地在c/h文件间进行切换,减少了按键的次数,思路也就更流畅了
插件--grep: 在工程中查找
1.下载 grep.vim
http://www.vim.org/scripts/script.php?script_id=311
2.安装
Linux下: 将 grep.vim复制到~/.vim/plugin文件夹中
Windows下:将 grep.vim复制到vim安装目录下的plugin文件夹中
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
上面的命令是类似这样调用的:
:Grep [<grep_options>] [<search_pattern> [<file_name(s)>]]
:Rgrep [<grep_options>] [<search_pattern> [<file_name(s)>]]
:Fgrep [<grep_options>] [<search_pattern> [<file_name(s)>]]
:Rfgrep [<grep_options>] [<search_pattern> [<file_name(s)>]]
:Egrep [<grep_options>] [<search_pattern> [<file_name(s)>]]
:Regrep [<grep_options>] [<search_pattern> [<file_name(s)>]]
:Agrep [<grep_options>] [<search_pattern> [<file_name(s)>]]
:Ragrep [<grep_options>] [<search_pattern> [<file_name(s)>]]
:GrepBuffer [<grep_options>] [<search_pattern>]
:Bgrep [<grep_options>] [<search_pattern>]
:GrepArgs [<grep_options>] [<search_pattern>]
但是我从来都不用敲上面那些命令的^_^,因为我在~/.vimrc中增加了下面这句:
nnoremap <silent> <F3> :Grep<CR>
比如你想在/home/wooin/vim71/src/main.c中查找"FEAT_QUICKFIX",则将光标移到"FEAT_QUICKFIX"上,然后按下F3键
在最下面的命令行会显示:
Search for pattern: FEAT_QUICKFIX 此时你还可以编辑该行,grep支持正则表达式,你想全词匹配的话可以改成:
Search for pattern: /<FEAT_QUICKFIX/> 然后按下回车:
在最下面的命令行会显示:
Search in files: *
是问你搜索范围,默认是该目录下的所有文件,此时你还可以编辑该行,比如你只想搜索源码文件:
Search in files: *.c *.h
然后在按下回车,会在弹出的QuickFix窗口中列出所有符合条件的搜索结果
插件--VisualMark: 高亮的书签(帮助命令:help Mark)
1.下载 visualmark.vim
http://www.vim.org/scripts/script.php?script_id=1026
2.安装
Linux下: 将 visualmark.vim复制到~/.vim/plugin文件夹中
Windows下:将 visualmark.vim复制到vim安装目录下的plugin文件夹中
该"书签"有个很很大的缺点: 不可见.
我下面要介绍的Visual Mark插件跟vim中的"Mark"没有什么关系,并不是使其可见,而是自己本身就是"可见的书签",接着往下看就明白了,用作者的话说就是"类似UltraEdit中的书签".
另外,网上也有使vim中的Mark可见的插件,但是我试了一下,好像没Visual Mark好用,我就不介绍了.
按照上面的方法安装好Visual Mark后,你什么也不用设置,如果是gvim,直接在代码上按下Ctrl+F2,如果是vim,用"mm",怎么样,发现光标所在的行变高亮了吧
如果你设置了多个书签,你可以用F2键正向在期间切换,用Shift+F2反向在期间切换.
好了,我Visual Mark介绍完了,够简单吧^_^.
如果你嫌书签的颜色不好看,你还可以自己定义,不过是修改这个插件脚本的的源码,在目录~/.vim/plugin/中找到并打开visualmark.vim,找到下面这段代码:
if &bg == "dark" // 根据你的背景色风格来设置不同的书签颜色
highlight SignColor ctermfg=white ctermbg=blue guifg=wheat guibg=peru
else // 主要就是修改guibg的值来设置书签的颜色
highlight SignColor ctermbg=white ctermfg=blue guibg=grey guifg=RoyalBlue3
endif
我还有几个不满意的地方:
1 这个书签不能自动保存,关闭vim就没了.
2 切换书签时不能在不同文件间切换,只能在同一个文件中切换
插件--自动补全(帮助命令::help new-omni-completion)
该功能要tags文件的支持,并且是ctags 5.6版本
你还需要在~/.vimrc文件中增加下面两句:
filetype plugin indent on 打开文件类型检测,加了这句才可以用智能补全
set completeopt=longest,menu 关掉智能补全时的预览窗口
请确定你的Ctags 5.6已经安装好,并且生成的tags文件已经可以用了
设置tags文件
:set tags=/home/wooin/vim71/tags 随便找一个有成员变量的对象,比如"parmp",进入Insert模式,将光标放在"->"后面,
然后按下"Ctrl+X Ctrl+O",此时会弹出一个下列菜单,显示所有匹配的标签
此时有一些快捷键可以用:
Ctrl+P 向前切换成员
Ctrl+N 向后切换成员
Ctrl+E 表示退出下拉窗口,并退回到原来录入的文字
Ctrl+Y 表示退出下拉窗口,并接受当前选项
如果你增加了一些成员变量,全能补全还不能马上将新成员补全,需要你重新生成一下tags文件,但是你不用重启vim,只是重新生成一下tags文件就行了,这时全能补全已经可以自动补全了,还真够"全能"吧.
vim中的其他补全方式还有:
Ctrl+X Ctrl+L 整行补全
Ctrl+X Ctrl+N 根据当前文件里关键字补全
Ctrl+X Ctrl+K 根据字典补全
Ctrl+X Ctrl+T 根据同义词字典补全
Ctrl+X Ctrl+I 根据头文件内关键字补全
Ctrl+X Ctrl+] 根据标签补全
Ctrl+X Ctrl+F 补全文件名
Ctrl+X Ctrl+D 补全宏定义
Ctrl+X Ctrl+V 补全vim命令
Ctrl+X Ctrl+U 用户自定义补全方式
Ctrl+X Ctrl+S 拼写建议
插件--SuperTab: 加速你的补全(帮助命令:help Mark)
1.下载 supertab.vmb
http://www.vim.org/scripts/script.php?script_id=1026
2.安装
Linux下: 用vim 打开supertab.vmb,执行命令(:so %)即可(vim会自动安装到plugin中,并设置tab键为快捷键)
Windows下:用vim 打开supertab.vmb,执行命令(:so %)即可
ps:如果后缀是.vba的文件,他也是自动安装文件,任然用vim打开,执行命令(:UseVimball ~/.vim),此命令将安装包解压缩到~/.vim目录。VImball安装方式的便利之处在于你可以在任何目录打开.vba包安装,而不用切换到安装目的地目录。而且不用运行helptags命令安装帮助文档。
在上面一节中你应该学会了自动补全代码的功能,按下"Ctrl+X Ctrl+O"就搞定了,如果你够懒的话肯定会说"这么麻烦啊,居然要按四个键",不必为此自责,因为Gergely Kontra 和 Eric Van Dewoestine也跟你差不多,只不过人家开发了supertab.vim这个插件,可以永远懒下去了,下面我来教你偷懒吧.
在你的~/.vimrc文件中加上这两句:(对于supertab.vmb 2.0 的版本好像 tab 失效,正在研究一下)
let g:SuperTabRetainCompletionType=2
let g:SuperTabDefaultCompletionType="<C-X><C-O>"
以后当你准备按"Ctrl+X Ctrl+O"的时候直接按<Tab>就好了,够爽吧 ....
我稍微再介绍一下上面那两句配置信息:
let g:SuperTabDefaultCompletionType="<C-X><C-O>"
" 设置按下<Tab>后默认的补全方式,默认是<C-P>,
" 现在改为<C-X><C-O>. 关于<C-P>的补全方式,
" 还有其他的补全方式,你可以看看下面的一些帮助:
" :help ins-completion
" :help compl-omni
let g:SuperTabRetainCompletionType=2
" 0 - 不记录上次的补全方式
" 1 - 记住上次的补全方式,直到用其他的补全命令改变它
" 2 - 记住上次的补全方式,直到按ESC退出插入模式为止
插件--折叠代码
插件--vim gcc编译
插件--vim gdb调试
继续添加