Vim-窗口中打开缓冲区的动态列表


22

我研究了几种在Vim中维护打开缓冲区列表的方法,其中有些非常好,但是似乎都没有我想要的那样。很可能没有我想要的东西存在,而且问问不会伤害您。

我一直在GVim中使用NERDTree,我喜欢将信息放在细长的左侧窗口中的想法。我整理了一个方便的图表,说明我希望环境如何显示:

|--------|---------------------------------------|
|        |                                       | 
|        |                                       | 
|NERDTree|           Windows                     | 
|        |                                       | 
|        |                                       | 
|        |                                       | 
|--------|                                       |
|        |                                       | 
|        |                                       | 
|  List  |                                       | 
|   of   |                                       | 
|  Open  |                                       | 
| Buffers|                                       | 
|        |                                       | 
|        |                                       | 
|--------|---------------------------------------|

所以我的问题是:在类似于NERDTree的窗口中,是否有一种vim-native或启用插件的方法来维护当前打开的缓冲区列表并从该列表中选择/编辑/关闭?

我知道这种方法可能与Vim的处理方式不符,如果您感觉我缺少有关如何在Vim会话中管理多个文件的信息,请发表评论并提出建议!


我还希望在nerdtree窗格下面(或上面)有一个缓冲区列表。如果我找到一个好的解决方案,我会尽力记得更新此帖子(但无论如何感谢您的提问)
Eric Drechsel 2012年

Answers:


7

您是否搜索过vim.org的插件存储库?有许多缓冲区切换插件供您选择,例如BufferGatorSelectBuf。另外,它们中的大多数都编译在Vim Wiki上的漂亮列表中


正如您在问题的最后部分提到的那样,这种系统并不符合每个人的口味。

讨厌一直都在打开所有这些菜单,按钮和列表:打开缓冲区的列表仅在您实际需要跳转到另一个缓冲区时才有用,而将这样的列表打开似乎对我来说是浪费空间。同样可以应用于增压状态线。

我使用相同的插件在缓冲区之间快速切换,并在我当前正在编辑的文件周围快速浏览文件系统。用,f(文件)或,b(缓冲区)调用后,完成后窗口消失。完善。还有其他 类似的 插件,如果您愿意,可以尝试所有插件

编辑

我感到不得不在操作中添加CtrlP的GIF动画,从而切换缓冲区:

使用CtrlP切换缓冲区

结束编辑

本地人:sb <Tab>也很整洁,但不那么性感。它不支持模糊匹配,但具有一些很大的优点:它是内置的,并且像一样工作:e <Tab>:vs <Tab>依此类推。


感谢您的建议。看起来BufferGator和SelectBuf至少都接近我所追求的功能,尽管它们可能需要进行一些调整才能使事情继续进行。我绝对感谢您浪费空间,但是在我当前的用例中,我一次打开了一个GVim实例几个小时,一次打开了许多文件,并根据需要在它们之间跳转。在这些情况下,持久缓冲区列表非常有用。但是,我将花一些时间来学习更典型的Vim缓冲区管理方法。
吞下2012年

我想象您正在使用大型显示器。无论选择哪种系统,您都仍然需要1.切换到缓冲区列表,2.选择一个缓冲区,3.按下一个键跳转到该列表,无论该缓冲区列表是否已经可见。因此,使用“按需”缓冲区切换器与保持缓冲区列表打开同样有效,并且可以节省空间。
romainl

我肯定会喜欢这种推理,这就是为什么我不太担心我在此描述的确切配置可能无法实现的原因。持久缓冲区列表的唯一主要优点是,只需0次击键就可以检查打开了哪些缓冲区,这是我发现很有价值的信息,而且我发现自己很难保留短期内存。(是的,我做了相当大的显示器上工作。)
asfallows

@romainl,您使用什么vimrc命令映射,b到具有ctrlp的搜索缓冲区?
大雪

1
@ snowbound,FWIW前一段时间我已经停止使用CtrlP或任何其他类似的插件。无论如何,我的命令是nnoremap ,b :CtrlPBuffer<CR>
romainl 2015年

5

感谢您的答复-我找到了MiniBufExplorer,它看起来非常擅长,但是不符合我描述的有关如何管理缓冲区的条件。如果事实证明没有办法做我想做的事情,或者我认为这不是正确的方法,那么MBE在我接下来要尝试的事情上名列前茅。
吞下2012年

1
不满足的唯一条件是列表在左侧。我同意,MiniBufExplorer它位于顶部(不会浪费左侧的空间)。也许我误解了您的要求。
马可(Marco)

在我当前的设置中,如图所示,在左侧具有缓冲区列表实际上是对空间使用情况的一种改进,因为NERDTree始终处于打开状态,但并不总是我们完整的垂直状态。与缓冲区列表共享该空间会很好。值得注意的是,这就是我使用GVim的方式,并且如果我在控制台中使用Vim,我将不需要持久的左列。我在控制台上对Vim的大多数使用是“打开文件,进行快速编辑,关闭Vim”
12

1

有一种方法可以使用winmanager插件来做到这一点。在此屏幕快照中,我将NERDTree和MiniBufExpl(github:techlivezheng / vim-plugin-minibufexpl,最新提交atm 349a9fbb)插件组合在同一垂直拆分上,并用F4切换。从理论上讲,该解决方案应适用于任何其他插件组合。

我的.vimrc示例

” {{{MiniBufExpl配置
让g:miniBufExplVSplit = 20“垂直打开
让g:miniBufExplSplitToEdge = 0“相对于上一个窗口(NERDTree)打开
“}}} MiniBufExpl配置

” {{{winmanager config
“注册插件
让g:NERDTree_title ='NERD树'
让g:MiniBufExpl_title ='MiniBufExpl'

”设置布局
让g:winManagerWindowLayout ='NERDTree | MiniBufExpl'

NERDTree的处理程序
功能!NERDTree_Start()
    执行'NERDTree'
终端功能

“ MiniBufExpl的处理程序
功能!MiniBufExpl_Start()
    执行'MBEOpen'
终端功能

映射以将拆分切换到F4
nmap <F4>:WMToggle
“}}} winmanager配置

问题:

  • NERDTree不使用winmanager创建的缓冲区,而是以自己的缓冲区打开...
  • ...因此winmanager缓冲区未使用
  • 在缓冲区之间跳转时,MiniBufExpl无法正确更新自身

我实现的行为远非完美,但这是一个好的开始。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.