Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1096762
  • 博文数量: 252
  • 博客积分: 4561
  • 博客等级: 上校
  • 技术积分: 2833
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-15 08:23
文章分类

全部博文(252)

文章存档

2015年(2)

2014年(1)

2013年(1)

2012年(16)

2011年(42)

2010年(67)

2009年(87)

2008年(36)

分类: LINUX

2011-11-02 16:11:46

 
查看文章

 
【转】 让你的Vim真正强大起来~
2010年12月21日 星期二 05:34 P.M.
转载自
最终编辑

最终截图如下:

需要用到的插件:

taglist需要ctags支持

ctags.exe:

taglist显示tag列表

taglist:

显示buf列表:

bufexplorer:

Nerd_Tree文件浏览

Nerd_tree:

界面管理插件:

winmanager:

 

一、ctags:

下载解压后是源码,感觉就那个exe文件有点用。直接放到一个目录里,D:\ctags58。

设置一下环境变量。path=D:\ctags58。这样可以直接运行目录下面的ctags.exe文件。或者直接把ctags.exe放入windows的目录里。

vimrc中的设置:

"生成一个tags文件

nmap :!ctags -R *

二、taglist设置:

下载解压到相应的vim文件夹中。

vimrc中设置:

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

"设置Taglist

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" 这项必须设定,否则出错,配置taglist的ctags路径

 

let Tlist_Ctags_Cmd = 'D:\ctags58\ctags.exe'

 

" 不同时显示多个文件的 tag ,只显示当前文件的

 

let Tlist_Show_One_File=1

 

" 如果 taglist 窗口是最后一个窗口,则退出 vim

 

let Tlist_Exit_OnlyWindow=1

 

"让当前不被编辑的文件的方法列表自动折叠起来 

 

let Tlist_File_Fold_Auto_Close=1

"把taglist窗口放在屏幕的右侧,缺省在左侧 

 

let Tlist_Use_Right_Window=1 

 

"显示taglist菜单

 

let Tlist_Show_Menu=1

 

"启动vim自动打开taglist

 

"let Tlist_Auto_Open=1 

启动自动打开这个选项暂时不设置。后面要让winmanager调用taglist。

三、bufexplorer:

下载解压,没啥说的。

四、winmanager:

下载解压,vimrc中的设置:

"""""""""""""""""""""""""""""""

 

"" winManager setting

 

"""""""""""""""""""""""""""""""

 

"设置界面分割

 

"let g:winManagerWindowLayout = "BufExplorer,FileExplorer|TagList"

 

let g:winManagerWindowLayout = "TagList|FileExplorer,BufExplorer"

 

"设置winmanager的宽度,默认为25

 

let g:winManagerWidth = 30

"定义打开关闭winmanager按键

 

nmap :WMToggle

以上3个插件安装设置完毕后,基本的界面功能就可以实现了。按F8可以打开/关闭界面。同时显示taglist和fileexplorer。在fileexplorer窗口

中按可以切换到bufexplorer窗口。

上述设置好后,有3个问题:

1 我想让插件显示在右侧,但是winmanager里面没有此选项

2 进入vim时候不能自动打开winmanager,winmanager不像taglist支持该功能

3 退出时不会像只有taglist时候那样,退出当前文件就会退出vim了

经过多次修改代码终于实在了上述3个功能。

五、将插件显示在右侧

打开winmanager.vim,在function! StartWindowsManager()函数中修改:

将:wincmd H 修改为wincmd L:

" for now assume that the explorer windows always stay on the left.

" TODO: make this optional later

" make the explorers window always stay on the right ---by chenyong

" wincmd H

wincmd L

六、进入vim自动打开winmanager

这个功能作为可选功能,我们可以在vimrc中设置:

"在进入vim时自动打开winmanager

let g:AutoOpenWinManager = 1

就可以让winmanager自动打开。

在winmanager.vim中修改:

"set auto open Winmanager

if g:AutoOpenWinManager

autocmd VimEnter * nested call s:StartWindowsManager()|1wincmd w

endif

七、退出缓冲区时,自动退出vim

这个功能是参考了taglist的自动退出功能,在taglist.vim中修改的。

函数:function! s:Tlist_Window_Exit_Only_Window()中的winbunr(2)改为winbunr(3),即只剩2个窗口时关闭,考虑到2个窗口肯定是同时存

在,所以这样还是可行的:

function! s:Tlist_Window_Exit_Only_Window()

" Before quitting Vim, delete the taglist buffer so that

" the '0 mark is correctly set to the previous buffer.

if v:version < 700

if winbufnr(3) == -1

bdelete

quit

endif

else

if winbufnr(3) == -1

if tabpagenr('$') == 1

" Only one tag page is present

bdelete

quit

else

" More than one tab page is present. Close only the current

" tab page

close

endif

endif

endif

endfunction

同时在vimrc中需要设置:

let Tlist_Exit_OnlyWindow=1

winmanager自带的fileexplorer这个插件实在是比较差。最重要的一点是fileexplorer不能自动更新,如果通过其他的途径修改了文件夹

中的内容,fileexplorer是不会显示的。相对而言Nerd_Tree功能就比较强大了。下面要把Nerd_Tree加入winmanager。

八、Nerd_tree:

下载解压,打开NERD_tree.vim,按照winmanager的说明,在最后加入下面代码: 

"Used by winmanager {{{1

let g:NERDTree_title = "[NERDTree]"

function! NERDTree_Start()

exe 'NERDTree'

endfunction


function! NERDTree_IsValid()

return 1

endfunction

同时把在vimrc中:

let g:winManagerWindowLayout='NERDTree|TagList,BufExplorer'

      原来的设置注释掉。加好后,发现每次打开winmanager都会出现一个空白的buffer。试验了好多次,但是Nerd_tree调用的函数就是会

打开一个新窗口。因为如此,将bufExplorer和NERD_Tree放在一起会显示不正常。NERD_Tree放在下面的窗口也会出错,实在比较郁闷。

。。。看了下NERD_Tree的代码,没看懂,只好再次改winmanager的代码了。

打开winmanager.vim 


" toggle showing the explorer plugins.
function! ToggleWindowsManager()
if IsWinManagerVisible()
call s:CloseWindowsManager()
else
call s:StartWindowsManager()
" NERD_tree need this. 打开时会有一个空白窗口,要把他关闭。
exe '1wincmd w'
exe 'q'
end
endfunction


找到函数function! ToggleWindowsManager(),加入两行,修改后整个函数如下:

加个注释,以免以后忘掉了,如果不想用nerd_Tree了,这2句话还得删掉。

另外打开时的命令和关闭时的命令也得同时修改了,试验了很多次:

taglist.vim中,找到下面的代码:

" Exit Vim itself if only the taglist window is present (optional)
" if g:Tlist_Exit_OnlyWindow
" autocmd BufEnter __Tag_List__ nested
" \ call s:Tlist_Window_Exit_Only_Window()
" endif


将这段代码修改为:

" Exit Vim itself if only the taglist window is present (optional)
let s:NERDTreeBufName = 'NERD_tree_'
if g:Tlist_Exit_OnlyWindow
augroup Exit_onlywindow
"当进入Nerd_Tree的buffer时也检测是否需要退出
exec "autocmd BufEnter ". s:NERDTreeBufName .
\"* call s:Tlist_Window_Exit_Only_Window()"
autocmd BufEnter __Tag_List__ nested
\ call s:Tlist_Window_Exit_Only_Window()
augroup end
endif
winmanager中:刚才添加的自动执行命令要改为:"set auto open Winmanagerif g:AutoOpenWinManager
" autocmd VimEnter * nested call s:StartWindowsManager()|1wincmd w
autocmd VimEnter * nested call s:StartWindowsManager()|1wincmd w|q
endif
这样所有的功能就实现了。在taglist窗口使用ctrl+n可以转换到bufexplorer窗口。


类别:默认分类 | | | 分享到i贴吧 | 浏览(462) | 评论 (0)
 
上一篇:Linux Sed命令详解    下一篇:Linux tail 命令详解
 
#in_related_doc a { text-decoration: none; }
最近读者:
 
网友评论:
发表评论:
内 容:


      

     

©2011 Baidu
阅读(747) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~