缓冲区浏览器 for vim

20

有什么建议可以更轻松地在vim中操作缓冲区?

使用ls和b1、bn和bp命令是不错的,但可能有更好的方法。

是lusty explorer最好的选择吗?

我正在使用vim 7.3。


6
我很惊讶这个东西能在被10k+人标记为有争议/主观等的情况下幸存下来。 - Hassan Syed
7个回答

27

你应该测试它们并根据你的口味和要求确定最好的一个。

我已经用过LustyExplorer一段时间了,并且非常喜欢,直到我尝试了CtrlP,我认为后者更快、更直观。 我将:CtrlPBuffer映射到,b,并且没有任何抱怨的理由:它既优雅、快速又直观。

不过,您不必依赖插件::b <tab>允许您通过所有可用缓冲区的列表进行选项卡浏览。 您可以使用:b pattern<Tab>获取较小的列表。


2
我完全同意第一句话;有很多选择,而且这真的非常主观,所以它取决于你的口味。找出一个好的系统来轻松切换插件(Vundle/Pathogen/VAM),然后尝试插件,直到你找到适合自己的设置为止。 - eugenevd
我想使用:CtrlPBuffer,因为我已经安装了CtrlP,但是CtrlP没有列出所有缓冲区...只有一个子集。有什么想法吗?反之,我想映射:buffer <Tab><Tab>(到Ctrl-A),在.vimrc中插入:nnoremap <C-A> :buffer <TAB><TAB>,但我做错了一些事情,因为我没有达到预期的行为... - Giorgio Robino
我将:CtrlPBuffer映射到C-a,现在在两个缓冲区之间切换(这是一种高频操作)只需按下C-a<CR>即可。 - Leo
:b <tab>非常简单,当您不断导航源代码并经常需要在前一个和当前文件之间切换,然后打开另一个等等时,您需要记住上一个缓冲区并让其轻松切换。 - stefanB
切换已经存在的两个缓冲区已经有内置的键绑定 ,,(可能实际上是 <leader>,<leader><leader>)。 - Jonathan Hartley
:b <tab> 哦,这是一个顿悟,从未想过这个! - Anton A

8

Unite.vim 是一个新的插件,我从 CtrlP 切换到 Unite.vim。

这篇文章 是一个好的起点,如果你想探索它能做什么。


5

我使用 minibufexpl.vim。我猜它的主要优点是占用很少的空间。


4

模糊查找还具有一个功能,即当您安装核心fzf库时,它(可选地)钩入您的shell,使ctrl-r(搜索历史记录)成为终端中模糊查找的交互式体验。我无法没有它。 - Jonathan Hartley

3
如果你使用的是编译有Ruby支持并已经安装了开发工具链(如make、gcc等,像我这样的Gentoo用户已经拥有所有这些工具),那么Command-T 是一个不错的选择。要将其用于切换缓冲区,您应该将一些东西映射到:CommandTBuffer,我就这样做了。
nnoremap         ,b   :CommandTBuffer<CR>

2

我之前使用过许多插件,包括minibufexpl和Bufexplorer,但它们都有一些让我烦恼的问题。

现在我使用年轻的插件Buffet,我会推荐它,因为对我来说似乎是最好的:它非常快速和易于使用。

个人希望通过Ctrl+TabShift+Ctrl+Tab切换我的缓冲区,并且缓冲区应按最近使用的顺序排序。

这是我的Buffet配置,以实现<C-Tab><S-C-Tab>切换:

noremap <silent> <C-Tab> :Bufferlistsw<CR>
noremap <silent> <C-S-Tab> :Bufferlistsw<CR>kk
if !has('gui')
   map <S-q> :Bufferlistsw<CR>
endif

augroup BuffetAdd
   if !exists("g:BuffetAdded")
      let g:BuffetAdded = 1
      au BufWinEnter buflisttempbuffer* map <buffer> <Tab> <CR>
      au BufWinEnter buflisttempbuffer* map <buffer> <C-Tab>   j
      au BufWinEnter buflisttempbuffer* map <buffer> <C-S-Tab> k

      " in console Vim we can't use <C-Tab> mappings (almost always),
      " so this is temporary solution: <S-q>
      if !has('gui')
         au BufWinEnter buflisttempbuffer* map <buffer> <S-q> j
         au BufWinEnter buflisttempbuffer* map <buffer> q <CR>
      endif

      " workaround Surround plugin issue in Buffet's window:
      " disable "ds" mapping in the Buffet window (to make "d" work fast)
      au BufEnter buflisttempbuffer* nunmap ds
      au BufLeave buflisttempbuffer* nmap   ds <Plug>Dsurround

   endif
augroup END

仅存在一个问题:Vim不允许你映射某些按键的释放操作,因此,你需要再次按下Tab才能真正切换到缓冲区。

无论如何,如果你不需要使用<C-Tab>来切换,Buffet插件在没有它的情况下也可以很好地工作。


你在这里犯了一个错误:has('gui')检查vim是否编译支持gui,而不是你是否使用gui版本的vim。应该是has('gui_running') - ZyX
@ZyX,谢谢,你是对的。但是如果我运行Vim的控制台版本(即vim而不是gvim),那么has('gui')也会返回0 - Dmitry Frank
这取决于vim的编译方式。我可以使用一个可执行文件同时编译gui和控制台版本,其中has('gui')将返回1,事实上我使用它进行测试(只需编译一次更简单)。 - ZyX

1

2019年6月更新

BufExplorer是我毫不犹豫的首选缓冲区管理工具。

" Buffer explorer
" ,be to open, q to close, d to delete buffer
Plug 'jlanzarotta/bufexplorer'

非常推荐上述插件。它简单而有效。更多详细信息请参见readme

如果您想要一些额外的功能(可选),我也使用以下内容:

" Close buffers but keep splits
Plug 'moll/vim-bbye'

并且:

Plug '/usr/local/opt/fzf'
Plug 'junegunn/fzf.vim'
" this setting for quick search across buffers
nmap <silent> <leader>b :Buffers<cr>

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