vim :winmanager Nerdtree+taglist bug fix

安装winmanager 插件

.vimrc 配置

" 设置winmanager
let g:NERDTree_title="[NERDTree]"
"let g:winManagerWindowLayout="NERDTree|TagList"
let g:winManagerWindowLayout='NERDTree|TagList,BufExplorer'
"let g:winManagerWindowLayout = "FileExplorer|TagList"
function! NERDTree_Start()
    exec 'NERDTree'
endfunction

function! NERDTree_IsValid()
    return 1
endfunction
"nmap wm :WMToggle<CR>

" 设置界面分割
"设置winmanager的宽度,默认为25
let g:winManagerWidth = 25
"定义打开关闭winmanager快捷键为F10
"nmap <silent> <F10> :WMToggle<cr><Leader>q
nmap <silent> <F10> :WMToggle<cr>
"在进入vim时自动打开winmanager
let g:AutoOpenWinManager = 1
"自动退出Winmanager
"autocmd bufenter * if (winnr("$") == 2 && exists("b:NERDTreeType") &&b:NERDTreeType == "primary")  | qa | endif

 在.vim/plugin/winmanager.vim中添加,别加在函数里,建议在最后添加


"set auto open Winmanager  
if g:AutoOpenWinManager 
    autocmd VimEnter * nested  call s:StartWindowsManager()|3wincmd w|q
    "autocmd VimEnter * nested call s:StartWindowsManager()|1wincmd w
endif

 以上|swincmd w|q 目的是切换到空白buf并q掉。要修改以下代码才能解决bug

修改:

打开winmanager.vim,找到函数function! <SID>ToggleWindowsManager(),加入两行,修改后整个函数如下:

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

参考以下:

https://www.cnblogs.com/ifys/archive/2010/10/24/1860610.html

发现每次打开winmanager都会出现一个空白的buffer。试验了好多次,但是Nerd_tree调用的函数就是会打开一个新窗口。因为如此,将bufExplorer和NERD_Tree放在一起会显示不正常。NERD_Tree放在下面的窗口也会出错,实在比较郁闷。。。。看了下NERD_Tree的代码,没看懂,只好再次改winmanager的代码了。

打开winmanager.vim,找到函数function! <SID>ToggleWindowsManager(),加入两行,修改后整个函数如下:

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

解决Vim使用Winmanager插件时自动启动与自动退出方法

https://blog.csdn.net/xuanwu_yan/article/details/43736299

解决Vim使用Winmanager插件时自动启动与自动退出方法

相信大家对Vim的感情是又爱又恨,爱他的无比强大,但想要真正使用他进行开发确又得花费大量时间习惯他的操作,但同时他又有很多的不足。对熟悉Visual Studio的人来讲(我)很是不爽。安装插件就是解决方案。

背景

按照两个前人的博客安装插件,分别为:

http://www.kuqin.com/shuoit/20140814/341684.html

http://blog.csdn.net/bokee/article/details/6633193

第一个是使用pathogen进行插件管理,但是装完Nerdtree和Tagbar之后发现好难看,大概是这样
只能左右显示

没办法,只有按照第二个链接继续安装一个叫做Winmanager的插件,但是不能够自动启动,百度一下,于是有了以下解决方法:

一、自动打开

参照[3],我们可以在~/.vimrc中设置:

let g:AutoOpenWinManager = 1
  • 1

同时,修改~/.vim/plugin/winmanager.vim文件,加入

"set auto open Winmanager 
if g:AutoOpenWinManager 
    autocmd VimEnter * nested  call s:StartWindowsManager()|'q'|4wincmd w  
endif

我给大家解释一下,’q’解决出现空白窗口现象,后面4wincmd w表示模拟4次w按键使光标自动跳转到打开的文件,而不是Nerdtree或者Tagbar窗口。OK,现在打开一个文件之后直接长这样:
修改之后

但是退出此文件时,需要使用:qa命令,如何做到自动退出Winmanager呢?

二、自动退出

这个是一个比较近似的做法,和[3]不同的是我修改了自动退出Nerdtree的语句。判断当前窗口包含几个子窗口,如果有2个的话自动退出。在~/.vimrc中加入

"自动退出Winmanager
autocmd bufenter * if (winnr("$") == 2 && exists("b:NERDTreeType") &&b:NERDTreeType == "primary")  | qa | endif

至此结束。


[1] http://www.kuqin.com/shuoit/20140814/341684.html
[2] http://blog.csdn.net/bokee/article/details/6633193
[3] http://www.cnblogs.com/ifys/archive/2010/10/24/1860610.html

 https://blog.csdn.net/xuanwu_yan/article/details/43736299

猜你喜欢

转载自blog.csdn.net/hunter___/article/details/81835971
今日推荐