我已经看过在Vim中使用选项卡的能力(使用 :tabe
, :tabnew
等)来替代我目前在隐藏缓冲区中的同一窗口中打开许多文件的做法 .
我希望我打开的每个不同文件始终位于其自己的选项卡中 . 但是,有些事情会妨碍这一点 . 我该如何解决这些问题:
-
当
gf
和^]
等命令跳转到另一个文件中的某个位置时,该文件将在当前选项卡的新缓冲区中打开 . 有没有办法让所有这些命令在新选项卡中打开文件,或者如果文件已经打开则切换到现有选项卡? -
切换缓冲区时,我可以使用
:b <part of filename><tab>
,它将完成现有缓冲区中文件的名称 .<part of filename>
甚至可以是文件名的中间而不是开头 . 是否有相应的切换标签?
10 回答
我相信你也可以用[^
停止,停止,停止 .
这不是Vim 's tabs are designed to be used. In fact, they'错误命名的方式 . 更好的名称是"viewport"或"layout",因为's what a tab is—it'是所有现有缓冲区的不同窗口布局 .
试图将Vim击败到1个标签== 1缓冲区是徒劳的 . Vim不知道或不关心它并不会在所有命令上尊重它 - 特别是,任何使用quickfix缓冲区的东西(
:make
,:grep
和:helpgrep
都是那些让人想到的东西)都会高兴地忽略标签而你无能为力要做到这一点 .代替:
:set hidden
如果你在某个窗口看不见的话 .
使用
:bn
,_:bp
,:b #
,:b name
和ctrl-6
在缓冲区之间切换 . 我喜欢ctrl-6
我自己(单独切换到之前使用的缓冲区,或#ctrl-6
切换到缓冲区编号#
) .使用
:ls
列出缓冲区,或MiniBufExpl或BufExplorer等插件 .在这里聚会迟到但很惊讶我在这个列表中没有看到以下内容:
:tab sball
- 这将为每个打开的缓冲区打开一个新选项卡 .:help switchbuf
- 这控制缓冲区切换行为,请尝试:set switchbuf=usetab,newtab
. 这应该意味着如果缓冲区打开则切换到现有选项卡,或者如果没有则创建新选项卡 .Vim
:help window
很好地解释了混淆"tabs vs buffers" .使用 buffers 在vim中打开多个文件 . 在其他编辑器(例如记事本)中,这是通过选项卡完成的,因此vim中的名称选项卡可能会产生误导 .
Windows 用于拆分工作空间并在一个屏幕上一起显示多个文件(缓冲区) . 在其他编辑器中,可以通过打开多个GUI窗口并在桌面上重新排列它们来实现 .
最后在这个类比中,vim的 tab pages 将对应于多个桌面,即不同的窗口重新排列 .
正如vim
help: tab-page
解释的那样,当一个人想要暂时编辑一个文件但又不想改变当前windows和缓冲区布局中的任何内容时,可以使用一个标签页 . 在这种情况下,可以仅使用另一个标签页来编辑该特定文件 .当然,您必须记住,在许多标签页或窗口中显示相同的文件将导致显示相同的工作副本(缓冲区) .
与此处的其他一些答案相反,我说您可以根据需要使用制表符 . vim旨在实现多功能和可定制,而不是强迫您根据预定义的参数工作 . 我们都知道程序员如何喜欢将我们的“道德规范”强加给其他人,所以这个成就当然是一个主要特征 .
<C-w>gf
是缓冲区'gf
命令的等效选项卡 .<C-PageUp>
和<C-PageDown>
将在标签之间切换 . (在Byobu中,这两个命令对我来说不起作用,但它们在Byobu / tmux之外工作 . 替代方案是gt
和gT
. )_<C-w>T
将当前窗口移动到新的标签页 .如果您希望vim尽可能使用现有选项卡,而不是创建重复选项卡,请将
:set switchbuf=usetab
添加到.vimrc文件中 . 您可以将newtab
添加到列表(:set switchbuf=usetab,newtab
)以强制显示编译错误的QuickFix命令在单独的选项卡中打开 . 我更喜欢split
,这会在拆分窗口中打开编译错误 .如果您使用
:set mouse=a
启用了鼠标支持,则可以通过单击它们与选项卡进行交互 . 默认情况下还有一个+
按钮,可以创建一个新选项卡 .有关选项卡的文档,请在正常模式下键入
:help tab-page
. (执行此操作后,您可以使用<C-w>T
练习将窗口移动到选项卡 . )有很长的命令列表 . 一些窗口命令与选项卡有关,因此您可能希望通过:help windows
查看该文档 .Addition: 2013-12-19
要在vim中打开多个文件,并在单独的选项卡中使用每个文件,请使用
vim -p file1 file2 ...
. 如果你像我一样并且总是忘记添加-p
,你可以在最后添加它,因为vim遵循正常的命令行选项解析规则 . 或者,您可以添加bash别名映射vim
到vim -p
.我遇到了同样的问题 . 我希望标签像缓冲区一样工作,我从来没有设法让它们 . 我最终解决的解决方案是使缓冲区表现得像标签!
查看名为Mini Buffer Explorer的插件,一旦安装和配置,您将能够以与标签相同的方式使用缓冲区,而不会丢失任何功能 .
对于那些不熟悉Vim并且来自其他文本编辑器的人(在我的Sublime Text中),这是一个答案 .
我仔细阅读了所有这些答案,但仍然不清楚 . 如果你仔细阅读它们,那么事情开始变得有意义,但是我需要花费数小时的时间在问题之间来回走动 .
首先,正如其他人所解释的那样:
Tab Pages ,听起来很像 tabs ,它们就像选项卡一样,看起来很像大多数其他GUI编辑器中的标签,但它们是一个在Vim上构建的糟糕的心智模型,不幸的是它弥补了你内在的额外力量标签页 .
我理解的第一个描述来自@crenate's answer,它们相当于多个桌面 . 在这方面看到你只打开了几个桌面,但每个桌面都打开了很多GUI窗口 .
我会说它们与其他编辑器/浏览器类似:
标签分组
Sublime Text工作区(即项目中打开的文件列表)
当您看到它们时,您就会意识到它们的强大功能,您可以轻松地将多组文件(缓冲区)组合在一起,例如您的CSS文件,HTML文件和JS文件位于不同的标签页中 . 这实际上非常棒 .
其他描述让我感到困惑
视口
这对我没有意义 . 虽然它确实有一个defined dictionary term的视口,但我只听说
:help window
doc中的Vim窗口 . 在我开始尝试使用标签页之前,Viewport不是一个我从未听说过Vim的术语 .如果您查看多个桌面等标签页,那么将桌面称为单个窗口似乎很奇怪 .
工作区
这可能更有意义,dictionary definition是:
所以它就像存放一组缓冲区的地方 .
我最初听起来并不像工作区的Sublime Text's concept,它是您在项目中打开的所有文件的列表:
然而,考虑更多,这确实同意 . 如果您将Vim标签页视为Sublime Text项目,那么在每个项目中只打开一个文件并在项目之间切换似乎很奇怪 . 因此,为什么使用标签页只打开一个文件是奇怪的 .
窗户的集合
:help window
以这种方式引用标签页 . 还有许多其他答案使用相同的概念 . 然而,直到你了解一下vim窗口是什么,那就没什么用了,就像在沙滩上建造城堡一样 .正如我上面提到的,vim窗口与视口相同,并且在_1111580中非常好地解释了:
我觉得奇怪的是,标签页被称为窗口的集合而不是缓冲区的集合 . 但我想你可以打开两个单独的标签页,每个标签页都有多个窗口都指向同一个缓冲区,至少这是我目前所理解的 .
看看:帮助标签它看起来不像vim想要像你那样工作......
缓冲区在选项卡之间共享,因此似乎无法锁定给定缓冲区以仅显示在某个选项卡上 .
不过,这是一个好主意 .
您可以通过使用支持选项卡的终端(如multi-gnome-terminal,然后在每个终端选项卡中运行vim实例)来获得所需的效果 . 不完美,但......
我用缓冲区,如选项卡,使用BufExplorer插件和一些宏:
使用BufExplorer,顶部没有标签栏,但另一方面它可以节省屏幕空间,而且可以打开无限数量的文件/缓冲区,并且可以搜索缓冲区列表......
如果您希望缓冲区像标签一样工作,请查看tabline plugin .
它使用单个窗口,并在顶部添加一行来模拟选项卡(仅显示缓冲区列表) . 很久以前,只有在GVim中支持选项卡而在命令行vim中不支持选项卡 . 因为它只使用缓冲区,所以一切都与vim的其余部分很好地集成 .