使用vim编辑器,常见的任务是浏览缓冲区。
我现在使用标准命令,例如:ls:bnext。实际上,我在.vimrc中设置了以下内容: MRU插件实现。

是否有一个像MRU一样简单但可以作用于缓冲区的插件?我不是Ctrlp的忠实拥护者,因为有时我不完全了解奇怪的行为(模糊模式选择...);
,所以我正在寻找一些像MRU插件一样简单的东西。无知编程vimscripts)

有什么建议吗?

评论

您是说:bnext而不是:cnext吗?

您是否特别需要将其作为quickfix窗口?还是只希望能够在窗口中看到打开的缓冲区? (因为有多个插件可以完成后者)。

我希望能够在窗口中浏览打开的缓冲区。确实,quickfix并不适用

@tommcdo:是的,抱歉,我通常的错别字。我的意思是:bnext,我更新了问题

相关:stackoverflow.com/questions/28669101/…

#1 楼

您可以使用以下每个缓冲区填充快速修复列表,如下所示:

行号,位置等)。在这种情况下,我们指定了一组最少的信息:缓冲区编号

setqflist()接受一个List和一个表达式(一个字符串),并返回一个新的表达式列表,该表达式应用于输入的每个项目清单。在这里,我们获取列出的缓冲区编号的列表,并将其格式化以用于map()setqflist(),其中'{"bufnr": v:val}'是列表中项目的值)。不满足给定的表达式。这里的表达式是v:val,表示存在并列出了缓冲区编号,即出现在filter()输出中。

buflisted(v:val)生成从:lsrange(a, b)的数字列表。


a返回给定缓冲区名称的编号。如果参数是b,则返回最大的缓冲区号。

要键入很多,而且不太容易记住,因此可以将其包装在vimrc中的命令中:

:call setqflist(map(filter(range(1, bufnr('$')), 'buflisted(v:val)'), '{"bufnr": v:val}'))


现在,您只需使用bufnr()来填充快速修复列表。做这样的事情:

command! Qbuffers call setqflist(map(filter(range(1, bufnr('$')), 'buflisted(v:val)'), '{"bufnr":v:val}'))


但是,我不建议这样做,因为它会使Quickfix列表对于'$':Qbuffers之类的东西几乎无法使用。 >

评论


感谢您的解释,Tommcdo。 Qbuffers很漂亮!也许我会在通话的最后添加一个:copen来立即打开quickfix窗口,也许报告光标位置可能很有用。我必须学习一点vimscript :-)

– Giorgio Robino
2015年2月23日在11:46



#2 楼

您应该尝试以下映射:

nnoremap gb :ls<CR>:b<Space>


在提示符下,键入所需的缓冲区编号,然后按Enter。



评论


关于在quickfind窗口中列出缓冲区的问题。

–VeXii
16年1月7日,11:38

是的,我的答案提供了一个轻量级的选择。

– romainl
16年1月7日在13:15

OP表示他知道缓冲区列表,但希望将其放在quickfix窗口中。而您的解决方案就是只使用bufferlist?

–VeXii
16年1月7日在20:21



#3 楼

看看bufexplorer插件。它会在边栏中打开所有缓冲区的可浏览列表,类似于提到的MRU插件。另外,在vim.org上还有更多这样的插件。请不要将相同的问题同时提交给多个站点!

评论


tks Ingo,我测试了一下bufexplorer,我喜欢它。我也在这里发布,因为建议使用stackoverflow

– Giorgio Robino
2015年2月23日在11:33

是的,我看到了。我希望您先删除原始的SO帖子,或者至少将其链接到交叉发布。

– Ingo Karkat
2015年2月23日在12:48