查看文章 |
最终截图如下: 需要用到的插件: 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 二、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 以上3个插件安装设置完毕后,基本的界面功能就可以实现了。按F8可以打开/关闭界面。同时显示taglist和fileexplorer。在fileexplorer窗口 中按 上述设置好后,有3个问题: 1 我想让插件显示在右侧,但是winmanager里面没有此选项 2 进入vim时候不能自动打开winmanager,winmanager不像taglist支持该功能 3 退出时不会像只有taglist时候那样,退出当前文件就会退出vim了 经过多次修改代码终于实在了上述3个功能。 五、将插件显示在右侧 打开winmanager.vim,在function! 将: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 function! if IsWinManagerVisible() call s:CloseWindowsManager() else call s:StartWindowsManager() " NERD_tree need this. 打开时会有一个空白窗口,要把他关闭。 exe '1wincmd w' exe 'q' end endfunction 找到函数function! 加个注释,以免以后忘掉了,如果不想用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 endifwinmanager中:刚才添加的自动执行命令要改为:"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窗口。
|