由于这篇文章太长了,所以对于读者而言不容易查看,对于本人而言编辑起来也是很吃力,所以就分了上下篇去写,而这篇会更加精彩,如果时间充足的话,也许会写第三篇,来致敬伟大的VIM,上篇的地址如下:
http://blog.csdn.net/hubbybob1/article/details/48055605
好了步入正题。
五.Cscope插件
如果说ctags的主要功能是建立各大文件之间的联系的话,那么Cscope的就是赋予VIM强大的搜索功能。首先来看如何安装此插件:首先要通过version命令查看vim支持的插件,在终端直接输入vim,打开vim编辑器,然后:version就可以看的vim的特性了,如下图所示:(+:表示支持,- :表示部支持)
可见是支持cscope的。
sudo apt-get install cscope
打开vim,然后查看cscope的帮助文件命令:cs help或者cscope help就会得到:
cscope 命令:
add :添加一个新的数据库 (用法: add file|dir [pre-path] [fl
ags])
find :查询一个模式 (用法: find c|d|e|f|g|i|s|t name)
3 或 c: Find functions calling this function
2 或 d: Find functions called by this function
6 或 e: Find this egrep pattern
7 或 f: Find this file
1 或 g: Find this definition
8 或 i: Find files #including this file
0 或 s: Find this C symbol
4 或 t: Find this text string
help :显示此信息 (用法: help)
kill :结束一个连接 (用法: kill #)
reset:重置所有连接 (用法: reset)
show :显示连接 (用法: show)
这个插件使用简单如此简单,但是功能却是相当强大,如下图所示当输入
在使用这个插件前必须像ctags一样建立关联文件,进入源码文件的根目录然后使用命令cscope -Rbq
就会生成三个文件:cscope.in.out cscope.out cscope.po.out,其中我们需要将 cscope.out 添加到源码中去,那么使用vim随便打开一个源码,然后使用命令:
cs add /绝对路径/cscope.out
这样才真正的可以使用cscope插件如下图所示,当输入命令:
cs f c channel_new //查找调用过channel_new函数的函数
好了尽然降到这儿,就不得不在进化一下了,使用vim ~/.vimrc来加强配置了:
if has("cscope")
set csprg=/usr/bin/cscope " 指定用来执行cscope的命令
set csto=0 " 设置cstag命令查找次序:0先找cscope数据库再找标签文件;1先找标签文件再找cscope数据库
set cst " 同时搜索cscope数据库和标签文件
set cscopequickfix=s-,c-,d-,i-,t-,e- " 使用QuickFix窗口来显示cscope查找结果
set nocsverb
if filereadable("cscope.out") " 若当前目录下存在cscope数据库,添加该数据库到vim
cs add cscope.out
elseif $CSCOPE_DB != "" " 否则只要环境变量CSCOPE_DB不为空,则添加其指定的数据库到vim
cs add $CSCOPE_DB
endif
set csverb
六.文件管理插件NERD tree ,MiniBufExplorer,Winmanager
(一).NERD tree
还记得很多代码编辑器中都有这么一个窗口,那就是目录结构窗口,,对于代码的机构会一目了然,,因此,这一小结,我们就来研究一下树形文件管理器和vin的结合使用吧,它就是NERD tree.
先从网站上下载这个插件吧:http://www.vim.org/scripts/script.php?script_id=1658
1.你会得到nerdtree.zip,然后解压就可以得到四个目录:syntax,plugin,nerdtree_plugin,doc,这四个目录内个包含一个文件
2. 我们把syntax,plugin,doc下的文件分别考到~/.vim下的对应的目录下,把nerdtree_plugin整体拷贝到~/.vim,即可.
3. 为了让取得帮助文件需要进入doc目录,然后执行vim,输入:helptags就可以看到如下:
" Press ? for help
就是按下’?’建就可以看到说明文档了,如下:
那么下面就要讲本插件的最常用的功能了,当然这些都在help文档内看到,就是上面的操作了:
ctrl + w + r //移动当前窗口的布局位置,改变当前窗口的位置
s // vsplit 一个新窗口打开选中文件,并跳到该窗口
o //在已有窗口中打开文件、目录或书签,并跳到该窗口
O //递归打开选中,结点下的所有目录,但不打开文件
x //合拢选中结点的父目录
X //递归 合拢选中结点下的所有目录
e //在主窗口中打开查看目录
P //跳到根结点
p //跳到父结点
J //跳到当前目录下同级的最后一个结点
j //跳到当前目录下同级的后一个结点
C //将选中目录或选中文件的父目录设为根结点,这个很有用
m //显示文件系统菜单,主要包括
// (!)Execute file//可执行文件
// (a)dd a childnode
// (m)ove the current node
// (d)elete the current node
// (c)copy the current node
t //在新 Tab 中打开选中文件/书签,并跳到新 Tab
T //在新 Tab 中打开选中文件/书签,但不跳到新 Tab
//这两个是指在vim建立标签,但是切换标签的时候输入命令:
:tabn下一标签页
:tabp上衣标签页
//这个功能很好,但是感觉很麻烦,可以直接建立一个终端标签页,即快捷键:
CTRL + SHIFT + T建立和
CTRL + PageUp/PageDown 来切换更方便
(二).MiniBufExplorer
这个插件的作用是提供多文件同时编辑功能,这个功能很重要,就像eclipse的同时打开多个C文件一样.
let g:NERDTree_title="[NERDTree]"
let g:winManagerWindowLayout="NERDTree|TagList"
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1 "这个作用是使用快捷键 CTRL + TAB 和 CTRL +SHIFT + TAB才能看的出来
let g:miniBufExplModSelTarget = 1
let g:miniBufExplMoreThanOne=0
"解决FileExplorer窗口变小问题
let g:miniBufExplForceSyntaxEnable = 1
let g:miniBufExplorerMoreThanOne=2
到此其插件的安装就完成了,那么来看看他最常用的功能吧:
由上图可以看出,在同一个vim下可以同时打开多个文件,这个插件就是这个强大的功能.
//在使用快捷键 CTRL + 方向键,可以切换MiniBufExplorer窗口,下面是快捷键
Tab //向前(右)循环切换到每个buffer名(文件名)上 或者 CTRL + TAB
SHIFT + Tab //向后(左)循环切换到每个buffer名上
//这两个可以与CTRL + Tab 和CTRL + SHIFT + Tab做对比
Enter //在打开光标所在的文件buffer
d //删除光标所在的文件buffer
//当然你也可以使用方向键,来移动光标切换文件显示,但是效率不高
//也可以使用命令行来切换
:bn //打开当前buffer的下一个buffer
:bp //打开当前buffer的前一个buffer
:b"num" //打开指定的buffer,"num"指的是buffer开始的那个数字
(三)Winmanager
下面来说一下最为关键的一个插件Winmanager,Winmanager将其他插件与vim整合起来,可见这才是一个关键的插件:
\
1. 下载插件:http://www.vim.org/scripts/script.php?script_id=95得到winmanager.zip,
2. 解压得到两个目录:plugin和doc,同理将两个目录下的文件考到~/.vim下的对应目录下
3. 在~/.vimrc中添加一下内容,可以使用快捷键 w+m直接打开这些插件窗口很方便
let g:NERDTree_title="[NERDTree]"
let g:winManagerWindowLayout="NERDTree|TagList"
function! NERDTree_Start()
exec 'NERDTree'
endfunction
function! NERDTree_IsValid()
return 1
endfunction
nmap wm :WMToggle
4.修改~/.vim/plugin目录下的winmanager.vim文件,找到这段代码,在else下的call s: 下面添加一行exe ‘q’
function! <SID>ToggleWindowsManager()
if IsWinManagerVisible()
call s:CloseWindowsManager()
else
call s:StartWindowsManager()
exe 'q'
end
endfunction
到此基本的vim窗口就配置完毕了!
在此在告诉大家的一个小技巧:
当你在代码之中按下 : CTRL + : 你会看到下图所示的内容
你就会看到带有序号的东西出来,仔细看的的话,就是自己曾经父之过的东西,那么这就方便了,你只要按下数字键(TAB + SPACE也可以)就可以快捷的把内容复制到光标处,按ESC建退出这一选择(不要告诉别人哦).
当然还有其他的插件,很利于快捷的编写代码,大家可以自己去研究,时间允许的话,后续会继续告诉大家我的经验.