如何在Vim中为每个标签页设置不同的缓冲区列表?

5
有没有可能在Vim中将一系列缓冲区“附加”到特定的标签上?我目前正在使用MiniBufferExplorer,它以漂亮的选项卡显示所有缓冲区。它可以与标准vim标签组合使用,但插件的缓冲区列表包含所有缓冲区,使用标签变得有点无用。这是我想要的一个例子:
选项卡A包含以下缓冲区列表: - FileA - FileB - FileC
选项卡B包含以下缓冲区列表: - FileD - FileE - FileF
目前我拥有的是这个: 选项卡A包含以下缓冲区列表: - FileA - FileB - FileC - FileD - FileE - FileF
选项卡B包含以下缓冲区列表: - FileA - FileB - FileC - FileD - FileE - FileF
当谈到“缓冲区列表”时,我指的是迷你缓冲区插件提供的选项卡清单。
是否有任何解决方法来实现此功能?

1
我也在寻找类似的设置。NERDTree + MiniBufferExplorer + 标签页是在一个物理窗口中拥有多个项目的好方法。下面答案中的代码看起来是一个不错的开始。 - claytron
1个回答

5
我想不出有任何基于选项卡的缓冲区浏览器,但是vimscript有很多函数可以跟踪缓冲区(:he function-list)。我只是为了好玩而做了这个。它可能会让你得到你想要的东西。它只是在vim字典中跟踪标签。您需要完善:TabExplorer函数或将过滤列表(即g:TabExplorer[tabpagenr()])打补丁到minibuf插件中。
将其保存为~/.vim/plugin/tabexplorer.vim并在启动时进行源代码。
let g:TabExplorer = {}

func! StoreBufTab()
    if !has_key(g:TabExplorer, tabpagenr())
        let  g:TabExplorer[tabpagenr()] = []
    endif

    if index(g:TabExplorer[tabpagenr()], bufname("%")) == -1 && bufname("%") != ""
        call add (g:TabExplorer[tabpagenr()],bufname("%"))
    endif
endfunc

func! DisplayTabExplorer()
    4split
    enew
    call append(".",g:TabExplorer[tabpagenr()])
endfunc

au BufEnter * call StoreBufTab()

command! TabExplorer call DisplayTabExplorer()

@michael 非常感谢你的起点。我开始使用那段代码,直到我决定转向netbeans和它的jvi vim插件,就像我在这里发布的另一个问题描述的那样:https://dev59.com/ykzSa4cB1Zd3GeqPiwSw 。 - Steven Rosato

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接