【问题标题】:How to have a different buffer list for each tabs in Vim?如何为 Vim 中的每个选项卡设置不同的缓冲区列表?
【发布时间】:2011-01-19 11:30:26
【问题描述】:

是否可以将缓冲区列表“附加”到 Vim 中的特定选项卡?我目前正在使用MiniBufferExplorer,它在漂亮的选项卡中显示所有缓冲区。它可以使用标准的 vim 选项卡组合,但插件的缓冲区列表包含所有缓冲区,使用选项卡变得有点没用。这是我想要的示例:

选项卡 A 包含以下缓冲区列表:

  • 文件A
  • 文件B
  • 文件C

选项卡 B 包含以下缓冲区列表:

  • 文件D
  • 文件E
  • 文件F

目前我拥有的是这样的:

选项卡A包含一个缓冲区列表

  • 文件A
  • 文件B
  • 文件C
  • 文件D
  • 文件E
  • 文件F

选项卡 B 包含以下缓冲区列表:

  • 文件A
  • 文件B
  • 文件C
  • 文件D
  • 文件E
  • 文件F

当谈到“缓冲区列表”时,我指的是列出 minibuffer 插件提供的选项卡。

有什么办法可以实现这一点吗?

【问题讨论】:

  • 我也在寻找类似的设置。 NERDTree + MiniBufferExplorer + 选项卡是在一个物理窗口中拥有多个项目的好方法。下面答案中的代码看起来是一个好的开始。

标签: vim tabs minibuffer


【解决方案1】:

我想不出任何基于 Tab 的缓冲区浏览器,但 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 插件,正如我在此处发布的另一个问题中所述:stackoverflow.com/questions/2276031/…
猜你喜欢
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 2018-09-14
  • 1970-01-01
相关资源
最近更新 更多