vim 目录浏览完备版

祸首

改用vim,不用gvim.原因如下:

  • vim更快
  • vim不容易被tab+alt搞晕
  • vim和tmux是绝配,即然我用tmux,为什么不1+1>2呢
  • kde的konsole调教一下,可以全屏的.可以更专心的工作.
  • ……

理由不能再充分了.

用vim改了我开多个gvim的习惯.

想要的

  • 右边是explor,固定的.
  • 上边是tab
  • 选中一个文件打开,都是新开一个tab,焦点自动到tab中

Te

:Te

在新的tab中打开explor,然后再选自已要的文件.

不是很随心,还没找到如何实现我想要的.

装插件nerdtree

https://github.com/scrooloose/nerdtree 记得改.vimrc,让tree默认打开

autocmd VimEnter * NERDTree

我想要的效果有人问了

Q. Can I have the nerdtree on every tab automatically?

A. Nope. If this is something you want then chances are you aren't using tabs and buffers as they were intended to be used. Read this http://stackoverflow.com/questions/102384/using-vims-tabs-like-buffers

If you are interested in this behaviour then consider vim-nerdtree-tabs

也就是nerdtree是不支持vim的tab,只能用vim的buffer了.但是vim的buffer默认是看不到的,不像tab.只有接着用插件来解决.

装插件minibufexpl

https://github.com/fholgado/minibufexpl.vim

可以在顶上出现一条很小的split,就像tab一样,把每个buffer显示出来. 我不可能每次都ctrl+w移动到上面,再选择要切换的buffer,再回车,太麻烦了. 官方说是加了这个配置可以用热键来切换.

let g:miniBufExplMapWindowNavVim = 1 
let g:miniBufExplMapWindowNavArrows = 1 
let g:miniBufExplMapCTabSwitchBufs = 1 
let g:miniBufExplModSelTarget = 1 

可是加了以后,ctrl+tab和ctrl+shift+tab都没有用.我的是VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Feb 15 2014 12:09:00).有清楚问题的朋友请留言.

还好只是buffer的切换,自已map热键吧! .vimrc 加入

map <C-N> :bn<cr>
map <C-P> :bp<cr>

ctrl+n ctrl+p 就可以切换了.

可是…可是,用下来还是有个不爽的. buffer会堆积起来,因为我不能控制,每打开一个文件都会有一个buffer.vimwiki里跳几次,就一堆buffer了.

于是又找到了这个插件

装插件vim-nerdtree-tabs

问题里提到了这个.

可以让nerdtree支持在多个tab时共用一个tree

可是…可是,tree里打开的内容,会盖了当前打开的内容.我还得自已开tab?

NERDTree open in tab

不起作用的

http://stackoverflow.com/questions/3998752/nerdtree-open-in-a-new-tab-as-last-tab-in-gvim

照做就可以了.建立文件~/.vim/ftplugin/nerdtree.vim

    if exists('b:haveRemappedT')
        finish
            endif
            let b:haveRemappedT=1
            let s:oldmap=maparg('T', 'n')
            function! s:LastTab()
            let tab=tabpagenr()
            tabnext
            execute "tabmove ".tabpagenr('$')
            execute "tabn ".tab
            endfunction
            execute 'nnoremap <buffer> T '.s:oldmap.':call <SID>LastTab()<CR>'

但是不起作用.

可以用的

后来发现自已绕圈子了.在 nerdtree里,不要用enter打开文件,用t,就可以在tab里打开了

ps

nerdtree新建文件

问题

nerdtree 不能判断文件是否已经打开,一个文件会在多个tab里打开

解决这个问题:让nerdtree判断文件是否打开

只能用 buffers 来了,前面也用过了buffer,再找!http://vim.wikia.com/wiki/Use_Vim_like_an_IDE