使用Vim的标签,如缓冲区

我已经研究过在Vim中使用tab的能力(用:tabe:tabnew等等)来取代我当前在隐藏缓冲区的同一个窗口中打开许多文件的做法。

我希望我打开的每个不同的文件始终位于其自己的选项卡中。 但是,有些事情阻碍了这一点。 我如何解决这些问题:

  1. 当像gf^]这样的命令跳转到另一个文件中的某个位置时,该文件将在当前选项卡中的新缓冲区中打开。 有没有办法让所有这些types的命令在新标签中打开文件,或者如果文件已经打开,可以使用文件切换到现有标签?

  2. 当切换缓冲区时,我可以使用:b <part of filename><tab>它将完成现有缓冲区中文件的名称。 <part of filename>甚至可以是文件名的中间而不是开头。 有切换标签的等价物吗?

停止,停止,停止。

这不是Vim的选项卡是如何devise的。 事实上,他们的名字是错误的。 一个更好的名字将是“视口”或“布局”,因为这是一个选项卡 – 它是所有现有缓冲区的窗口的不同布局。

试图击败Vim到1选项卡== 1缓冲区是徒劳的练习。 Vim不知道也不在乎,它不会在所有的命令上尊重它,特别是任何使用quickfix缓冲区的东西( :make:grep:helpgrep都是我们想到的),会很乐意忽略标签,没有办法阻止这一切。

代替:

  • :set hidden
    如果你还没有这套,那就这样做吧。 它使得vim像全球其他多文件编辑器一样工作。 您可以编辑在某个窗口中不可见的缓冲区。
  • 使用:bn:bp:b # ctrl-6 :b namectrl-6在缓冲区之间切换。 我喜欢ctrl-6我自己(单独切换到以前使用的缓冲区,或#ctrl-6切换到缓冲区号# )。
  • 使用:ls列出缓冲区,或像MiniBufExpl或BufExplorer的插件。

在这里派对晚了,但很惊讶,我没有看到这个列表中的以下内容:

:tab sball – 这将为每个打开的缓冲区打开一个新的选项卡。

:help switchbuf – 这个控制缓冲区切换的行为,试试:set switchbuf=usetab,newtab 。 这意味着如果缓冲区是打开的,则切换到现有的选项卡,否则创build新的选项卡。

Vim :help window解释了“标签vs缓冲区”的混淆。

缓冲区是文件的内存中的文本。
窗口是缓冲区上的视口。
一个标签页是一个窗口的集合。

在vim中用缓冲区打开多个文件。 在其他编辑器(例如记事本++)中,这是通过制表符来完成的,因此vim中的名称标签可能会引起误解。

Windows是为了分割工作区并在一个屏幕上显示多个文件(缓冲区)。 在其他编辑器中,可以通过打开多个GUI窗口并在桌面上重新排列这些窗口来实现。

最后在这个比喻中,vim的标签页面将对应多个桌面,也就是不同的windows重排。

作为vim的help: tab-page解释了一个标签页可以使用,当你想暂时编辑一个文件,但不想改变当前的窗口和缓冲区布局的任何东西。 在这种情况下,另一个标签页可以用于编辑该特定文件的目的。

当然,你必须记住,在许多标签页或窗口中显示相同的文件将导致显示相同的工作副本(缓冲区)。

相反的一些其他的答案在这里,我说你可以使用标签,但是你想要的。 vim被devise成多function和可定制的,而不是强迫你按照预定义的参数工作。 我们都知道我们程序员喜欢把我们的“道德”强加给其他人,所以这个成就肯定是一个主要特征。

<Cw>gf是缓冲区' gf命令的标签等效物。 <C-PageUp><C-PageDown>将在选项卡之间切换。 (在Byobu中,这两个命令不适用于我,但是它们不在Byobu / tmux中工作,替代方法是gtgT 。) <Cw>T将当前窗口移动到一个新的标签页。

如果您希望vim尽可能使用现有选项卡,而不是创build重复选项卡,请将:set switchbuf=usetab添加到.vimrc文件中。 您可以将newtab添加到列表( :set switchbuf=usetab,newtab )以强制显示编译错误的QuickFix命令在单独的选项卡中打开。 我宁愿split而是在拆分窗口中打开编译错误。

如果您通过以下方式启用了鼠标支持:set mouse=a ,则可以通过单击它们与选项卡进行交互。 还有一个默认的+button将会创build一个新的选项卡。

有关选项卡上的文档,请在正常模式下键入:help tab-page 。 (完成之后,您可以练习使用<Cw>T将窗口移动到选项卡上。)有一长串命令。 一些窗口命令与制表符有关,所以你可能也想看看这个文档,通过:help windows

增加:2013-12-19

要在单独的选项卡中使用每个文件在vim中打开多个文件,请使用vim -p file1 file2 ... 如果你像我一样,总是忘记添加-p ,你可以在最后添加它,因为vim遵循正常的命令行选项parsing规则。 或者,你可以添加一个bash别名映射vimvim -p

我遇到了同样的问题。 我想要标签像缓冲区一样工作,我从来没有设法让他们。 我终于解决的解决scheme是让缓冲区的行为像标签!

查看名为迷你缓冲区资源pipe理器的插件,一旦安装和configuration完毕,您就可以像使用标签一样使用缓冲区,而不会丢失任何function。

看看:帮助标签它看起来不像VIM希望以你的方式工作…

缓冲区是跨标签共享的,所以似乎不可能locking一个给定的缓冲区,使其只出现在特定的选项卡上。

不过,这是个好主意。

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

  • 您可以映射通常操作缓冲区的命令来操作选项卡,就像我在.vimrc中使用gf所做的那样:

     map gf :tabe <cfile><CR> 

    我相信你可以用[^做同样的事情

  • 我不认为vim支持这个标签(还)。 我使用gt和gT分别移动到下一个和上一个选项卡。 您也可以使用Ngt,其中N是选项卡号。 我有一个peeve是,默认情况下,选项卡号不显示在选项卡行中。 为了解决这个问题,我在我的.vimrc文件的末尾添加了一些函数(我没有粘贴,因为它很长,而且格式不正确)。

我使用caching像标签,使用BufExplorer插件和几个macros:

 " CTRL+b opens the buffer list map <Cb> <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,您的顶部没有标签栏,但另一方面它可以节省屏幕上的空间,另外还可以打开无限数量的文件/缓冲区,并且可以search缓冲区列表。

对于那些不熟悉Vim和其他文本编辑器的人来说,这是一个答案(在我的案例中为Sublime Text)。

我读通过所有这些答案,但仍不清楚。 如果你仔细阅读,那么事情就会变得有意义,但是花了我几个小时的时间来回答问题。

首先,正如其他人所解释的那样:

标签页面 ,听起来很像标签 ,他们的行为像标签,看起来很像其他大多数其他GUI编辑器中的标签,但他们不是。 我认为这是一个在Vim中构build的糟糕的心理模型,不幸的是,它会覆盖标签页中的额外function。

我理解的第一个描述是@ crenate的答案是,它们相当于多个桌面。 在这方面看来,你只能打开几个桌面,但在每个桌面都有很多的GUI窗口。

我会说他们在其他编辑器/浏览器类似:

  1. 标签分组
  2. 崇高文本工作区(即您在项目中打开的文件列表)

当你看到他们时,你意识到了他们的力量,你可以轻松地将文件(缓冲区)集合在一起,例如你的CSS文件,你的HTML文件和你的JS文件在不同的标签页中。 这实际上非常棒。

其他描述,我觉得困惑

视口

这对我来说没有意义。 尽pipe它有一个定义的字典术语 ,但我只听说过在:help window doc中引用Vim窗口。 视口不是我曾经听过的关于Sublime Text,Visual Studio,Atom,Notepad ++等编辑的术语。 事实上,我从来没有听说过Vim,直到我开始尝试使用标签页。

如果您像查看多个桌面一样查看标签页,则将桌面称为单个窗口似乎很奇怪。

工作区

这可能更有意义, 字典的定义是:

一个临时使用的记忆存储设备。

所以它就像一个你存放一组缓冲区的地方。

我最初听起来并不像Sublime Text的工作区概念 ,它是您在项目中打开的所有文件的列表:

sublime-workspace文件,其中包含用户特定的数据,例如打开的文件和对每个文件的修改。

不过考虑一下,这确实是一致的。 如果将Vim标签页看作是一个Sublime Text项目,那么在每个项目中只打开一个文件并在项目之间切换,看起来很奇怪。 因此,为什么使用标签页打开只有一个文件是奇怪的。

窗口的集合

:help window是指这样的标签页。 另外许多其他答案使用相同的概念。 然而,直到你开始讨论一个vim窗口的时候,那就没有多大用处,比如在沙滩上build一座城堡。

正如我上面提到的,一个vim窗口和在这个linux.com文章中很好地解释了一个视口和静音是一样的:

在Vim中一个非常有用的function是能够分割一个或多个文件之间的可视区域,或者只是分割窗口以更容易地查看同一文件的两个位。 Vim文档将这个视为一个视口或窗口,可以互换使用。

如果您曾经使用Vim的帮助function,您可能已经熟悉了这个function:帮助主题或按F1键。 当您input帮助时,Vim会拆分视口并在顶部视口中打开帮助文档,从而使您的文档在底部视口中保持打开状态。

我觉得奇怪的是,标签页被称为窗口集合,而不是缓冲区集合。 但我想你可以有两个单独的标签页打开,每个窗口都指向同一个缓冲区,至less这是我了解到目前为止。

如果你想让缓冲区像标签一样工作,看看标签插件 。

它使用单个窗口,并在顶部添加一行来模拟选项卡(只显示缓冲区列表)。 很久以前,GVim只支持标签,而不是命令行vim。 由于它只与缓冲区一起运行,因此所有内容都与vim的其他部分集成在一起。