在上篇文章里讲了 vundle ,这次我们用 vundle 打造vim利器
声明: $xxxxx 表示shell命令 :xxxxx 表示vim命令
1. 由于在下面的插件中需要ctags程序,所以我们这里先打造好ctags环境
ctags
tags文件(标签文件)可是程序员的看家宝呀, 你可以不用它, 但你不能不知道它, 因为Linux内核源码都提供了"make tags"这个选项.
tags文件是由ctags程序产生的一个索引文件, ctags程序其时叫"Exuberant Ctags", 是Unix上面ctags程序的替代品, 并且比它功能强大, 是大多数Linux发行版上默认的ctags程序。Ctags工具是用来遍历源代码文件生成tags文件,这些tags文件能被编辑器或其它工具用来快速查找定位源代码中的符号(tag/symbol),如变量名、函数名等。下面插件中tags文件就是Tagbar和OmniCppComplete工作的基础。如果你在读程序时看了一个函数调用, 或者一个变量, 或者一个宏等等, 你想知道它们的定义在哪儿, 现在流行用是的
查查你电脑里有没有ctags这个程序。
方法:
$ ctags --version
我的 ubuntu12.04没有,所以用如下命令安装
$ sudo apt-get install exuberant-ctags
$ ctags --version
结果显示装好了
Exuberant Ctags 5.9~svn20110310, Copyright (C) 1996-2009 Darren Hiebert
Compiled: Nov 9 2011, 17:40:39
Addresses:
Optional compiled features: +wildcards, +regex
如果没有或者有但版本低于5.6,那建议你去装个高版本
下载地址: http://ctags.sourceforge.net 安装和普通软件一样,不再赘述
由于vim的某些插件需要将tags文件,所以要用ctags生成tags文件,这样viim会自动调用,下面看如何生成tags文件
方法一:在vimrc中增加一句
"设置ctags的快捷键为 Ctrl-F12
map :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
然后,进入源码的根目录,打开vim,按下ctrl-F12,会自动生成tags文件并自动加载到vim,以后可以跳转到定义处了。
方法二:进入源码根目录,执行
$ctags -R
命令,就会生成tags文件,然后用vim打开源程序,并执行
:set tags = /..../tags
/..../tags 这表示你的tags文件路径
此时tags文件加载进vim了,可以跳转了。
ctags的使用
快捷键:Ctrl-] 跳转到光标所在符号的定义。
Ctrl-t 回到上次跳转前的位置。
更多功能通过命令man ctags或在Vim命令行下运行help ctags查询
注意:tags文件不会自动更新,所以当你中途修改了代码时,应该手动重新生成tags文件,vim会随时更新加载tags文件所以不用重启。
2. 插件的安装:注意要添加到vimrc文件中的内容我用代码形式表示出来
在https://github.com/vim-scripts里面可以找插件
添加vim-scripts里面插件(注意插件名称要跟仓库的一致)
"提供多文件同时编辑功能,操作缓存buffer窗口
Bundle 'minibufexplorerpp'
let g:miniBufExplMapWindowNavVim = 1 "Ctrl- to move to window
let g:miniBufExplTabWrap = 1 " make tabs show complete (no broken on two lines)
这样就可以使用 minibuf explorerpp了,
Ctrl-h/j/k/l 在各个窗口中切换,其中minibuf 占用的就是一个窗口,你可以用 Ctrl-k 切换到其上
在minibuf窗口中用
按
s 水平方向分隔原来窗口打开
v 垂直方向分隔原来窗口打开
每个 buffer 名称前都有个数字,那是 buffer 的编号,因此,可以输入 :
b 下面红色部分是网友写的一个快捷键的设置,我没用,如果大家想用的话可以看看,但是要注意不要跟别的冲突
先自声明,本人是个懒种,因此设定了几个快捷键:
脚本如下:
nnoremap
nnoremap
inoremap
nnoremap
nnoremap
inoremap
" Cycle Through buffers
" from MiniBufExplorer, modified by DJW
function! MyCyclebuffer(forward)
" Change buffer (keeping track of before and after buffers)
let l:origBuf = bufnr(''%'')
if (a:forward == 1)
bn!
else
bp!
endif
let l:curBuf = bufnr(''%'')
" Skip any non-modifiable buffers, but don''t cycle forever
" This should stop us from stopping in any of the [Explorers]
while getbufvar(l:curBuf, ''&modifiable'') == 0 && l:origBuf != l:curBuf
if (a:forward == 1)
bn!
else
bp!
endif
let l:curBuf = bufnr(''%'')
endwhile
endfunction
"
nnoremap
nnoremap
inoremap
"
nnoremap
inoremap
vnoremap
nnoremap
inoremap
"提供源代码符号的结构化视图,这个插件需要tags文件的支持
Bundle 'majutsushi/tagbar'
nmap :TagbarToggle "设置快捷键,按下F4即可显示列表
let g:tagbar_autofocus = 1
let g:tagbar_width = 30 "设置宽度,默认为30
autocmd VimEnter * nested :call tagbar#autoopen(1) "打开vim时自动打开tagbar
let g:tagbar_left = 1 "在左侧
"let g:tagbar_right = 1 "在右侧
在终端运行命令 apt-get install cscope 安装cscope
"对cscope的支持
"Bundle 'cscope-quickfix'
"设定使用 quickfix 窗口来显示 cscope 的查询结果
set cscopequickfix=s-,c-,d-,i-,t-,e-
"切换到下一个结果
nmap :cn
"切换到上一个结果
nmap :cp
silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' > cscope.files"
silent! execute "!cscope -Rbkq "
if has("cscope")
set csprg=/usr/bin/cscope "指定用来执行 cscope 的命令
set csto=1 "先搜索tags标签文件,再搜索cscope数据库
set cst "使用|:cstag|(:cs find g),而不是缺省的:tag
set nocsverb "不显示添加数据库是否成功
" add any database in current directory
if filereadable("cscope.out")
"添加cscope数据库
execute "cs add cscope.out"
endif
set csverb "显示添加成功与否
endif
"cscope插件:查询符号的调用和定义位置等,已经集成到vim里面,这里只是映射快捷键"g的按法是先按"Ctrl+Shift+-", 然后很快再按"g"
nmap s :cs find s =expand("") "查找本 C 符号(可以跳过注释)
nmap g :cs find g =expand("") "查找本定义
nmap c :cs find c =expand("") "查找调用本函数的函数
nmap t :cs find t =expand("") "查找本字符串
nmap e :cs find e =expand("") "查找本 egrep 模式
nmap f :cs find f =expand("") "查找本文件
nmap i :cs find i ^=expand("")$ "查找包含本文件的文件
nmap d :cs find d =expand("") "查找本函数调用的函数
"在Vim命令行下运行cw命令,就能在编辑区下面quickfix窗口看到所有查找结果的列表
nmap
nmap
"提供树形浏览文件系统的界面
Bundle 'The-NERD-tree'
" 在 vim 启动的时候默认开启 NERDTree(autocmd 可以缩写为 au)
autocmd VimEnter * NERDTree
map
map
”按F3即可显示或隐藏NerdTree区域了。
和编辑文件一样,通过h j k l移动光标定位
o 打开关闭文件或者目录,再按就是关闭目录,如果是文件的话,光标出现在打开的文件中
go 效果同上,不过光标保持在文件目录里,类似预览文件内容的功能
i和s可以水平分割或纵向分割窗口打开文件,前面加g类似go的功能
t 在标签页中打开文件,并跳到标签
T 在后台标签页中打开,但不跳
p 到上层目录
P 到根目录
K 到同目录第一个节点
J 到同目录最后一个节点
m 显示文件系统菜单(添加、删除、移动操作)
? 帮助
这个插件的常用快捷键.
常用快捷键:
o - 打开所选文件或目录
enter - 相当于o
go - 类似o, 但光标仍然停留在NERD_tree
t - 在新标签中打开所选文件
T - 类似t, 但光标仍然停留在NERD_tree
i - 在一个水平分割窗口中打开文件
gi - 类似i, 但光标仍然停留在NERD_tree
s - 在一个垂直分割窗口中打开文件 |NERDTree-s|
gs - 类似s, 但光标仍然停留在NERD_tree
O - 递归打开所选目录
在使用中如果发现nerdtree显示列表时,名称前面有 ?则做如下修改:
编辑NERD_tree.vim,找到这句call s:initVariable("g:NERDTreeDirArrows", !s:running_windows) ,把那个"!"去掉试试
set completeopt=longest,menu
"主要提供输入时实时提供类或结构体的属性或方法的提示和补全,该插件需要安装较高版本ctags
Bundle 'OmniCppComplete'
"使Tab快捷键具有更快捷的上下文提示功能
Bundle 'SuperTab'
let g:SuperTabRetainCompletionType=2
let g:SuperTabDefaultCompletionType="
"函数原型显示
Bundle 'echofunc.vim'
"PowerLine插件 状态栏增强展示
Bundle 'Lokaltog/vim-powerline'
"vim有一个状态栏 加上powline则有两个状态栏
set laststatus=2
set t_Co=256
let g:Powline_symbols='fancy'
"用于显示黑客帝国里面的字母屏幕,挺好玩的,哈哈
Bundle 'matrix.vim'
matrix使用
:Matrix
如果大家有什么好的插件或者使用方法,欢迎大家评论