使用Vim的选项卡,例如缓冲区
我已经研究了在Vim中使用制表符的能力(带有:tabe
,:tabnew
等),以替代目前在同一窗口中在隐藏缓冲区中打开许多文件的做法。
我希望我打开的每个不同文件始终位于其自己的标签中。但是,有一些事情会阻碍这种情况。我该如何解决这些问题:
- 当类似" gf"和" ^]"的命令跳转到另一个文件中的某个位置时,该文件将在当前选项卡的新缓冲区中打开。有没有一种方法可以让所有这些命令在新选项卡中打开文件,或者如果文件已经打开,则切换至带有该文件的现有选项卡?
- 当切换缓冲区时,我可以使用
:b <文件名的一部分> <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 name
和ctrl-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
。这应该表示如果缓冲区已打开,则切换到现有选项卡,否则请创建一个新选项卡。