使用Vim的选项卡,例如缓冲区

时间:2020-03-06 14:26:14  来源:igfitidea点击:

我已经研究了在Vim中使用制表符的能力(带有:tabe:tabnew等),以替代目前在同一窗口中在隐藏缓冲区中打开许多文件的做法。

我希望我打开的每个不同文件始终位于其自己的标签中。但是,有一些事情会阻碍这种情况。我该如何解决这些问题:

  • 当类似" gf"和" ^]"的命令跳转到另一个文件中的某个位置时,该文件将在当前选项卡的新缓冲区中打开。有没有一种方法可以让所有这些命令在新选项卡中打开文件,或者如果文件已经打开,则切换至带有该文件的现有选项卡?
  • 当切换缓冲区时,我可以使用:b &lt;文件名的一部分> &lt;tab>,它将完成现有缓冲区中文件的名称。 " <文件名的一部分>"甚至可以是文件名的中间而不是开头。有切换标签的等效项吗?

解决方案

看着
:帮助标签
vim似乎不希望我们按照自己的方式工作...

缓冲区在选项卡之间共享,因此似乎无法将给定的缓冲区锁定为仅出现在特定选项卡上。

不过,这是个好主意。

我们可以通过使用支持选项卡的终端(如multi-gnome-terminal),然后在每个终端选项卡中运行vim实例,来获得所需的效果。不过还不完美。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  • 我们可以映射通常操作缓冲区以操作选项卡的命令,就像我在.vimrc中使用gf所做的那样:
map gf :tabe <cfile><CR>

我确定我们可以使用[^

  • 我不认为vim支持选项卡(尚未)。我使用gt和gT分别移至下一个和上一个选项卡。我们也可以使用Ngt,其中N是制表符编号。我有一个烦恼,默认情况下,选项卡行中不显示选项卡号。为了解决这个问题,我在.vimrc文件的末尾放置了几个函数(我没有粘贴到这里,因为它很长而且格式不正确)。

我遇到了同样的问题。我希望选项卡像缓冲区一样工作,但我从来没有设法使它们到达缓冲区。我最终选择的解决方案是使缓冲区的行为像制表符一样!

签出名为Mini Buffer Explorer的插件,安装并配置好之后,就可以像使用tabs一样有效地使用缓冲区,而不会失去任何功能。

停止,停止,停止。

这不是设计Vim标签的方式。实际上,它们的名字是错误的。更好的名称是"视口"或者"布局",因为这就是选项卡,它是所有现有缓冲区的窗口的不同布局。

试图将Vim分成1个tab == 1个缓冲区是徒劳的。 Vim并不知道或者不在乎,并且不会在所有命令上都遵守它,特别是那些使用quickfix缓冲区的东西(:make:grep:helpgrep会让人想到)忽略标签,我们无能为力。

反而:

  • :set hidden如果尚未设置,请这么做。它使vim像地球上其他所有多文件编辑器一样工作。我们可以编辑在窗口某处不可见的缓冲区。
  • 使用:bn:bp:b#:b namectrl-6在缓冲区之间切换。我自己喜欢ctrl-6(单独将其切换到以前使用的缓冲区,或者将#ctrl-6`切换到缓冲区编号#)。
  • 使用:ls列出缓冲区,或者使用MiniBufExpl或者BufExplorer之类的插件。

我使用BufExplorer插件和一些宏来使用制表符之类的缓冲区:

" CTRL+b opens the buffer list
map <C-b> <esc>:BufExplorer<cr>

" gz in command mode closes the current buffer
map gz :bdelete<cr>

" g[bB] in command mode switch to the next/prev. buffer
map gb :bnext<cr>
map gB :bprev<cr>

使用BufExplorer时,顶部没有标签栏,但另一方面,它节省了屏幕空间,此外,我们可以打开无数个文件/缓冲区,并且可以搜索缓冲区列表...

在这里参加聚会有点晚,但感到惊讶的是我没有在此列表中看到以下内容:

:tab sball会为每个打开的缓冲区打开一个新的标签。

:help switchbuf,它控制缓冲区切换行为,尝试:set switchbuf = usetab,newtab。这应该表示如果缓冲区已打开,则切换到现有选项卡,否则请创建一个新选项卡。