像使用缓冲区一样使用Vim's选项卡

我已经看到了在Vim中使用选项卡(与:tabe:tabnew等)的能力,以取代我目前的做法,在隐藏缓冲区的同一个窗口中打开许多文件。

我想每个不同的文件,我已经打开,总是在自己的选项卡。然而,有一些事情阻碍了这一点。我如何解决这些问题:

  1. 当像gf^]这样的命令跳转到另一个文件中的位置时,该文件将在当前选项卡的新缓冲区中打开。是否有一种方法可以让所有这些类型的命令在一个新的选项卡中打开文件,或者如果文件已经打开,则切换到现有的选项卡?

  2. 当切换缓冲区时,我可以使用 :b <part of filename><tab> 它将完成现有缓冲区中的文件名。<part of filename>甚至可以是文件名的中间,而不是开头。切换标签有同等的功能吗?李< / p > < / >
165679 次浏览
< p > :帮助选项卡 它看起来不像vim想要以你的方式工作…

缓冲区是跨选项卡共享的,因此似乎不可能将给定的缓冲区锁定为只出现在某个选项卡上。

不过,这是个好主意。

通过使用支持选项卡的终端(如multi-gnome-terminal),然后在每个终端选项卡中运行vim实例,您可能会得到想要的效果。不过,这并不完美……

  • 你可以将通常操作缓冲区的命令映射到操作制表符,就像我在.vimrc中对gf所做的那样:

    map gf :tabe <cfile><CR>
    

    我相信你也可以用[^

  • 我认为vim还不支持标签。我使用gt和gt分别移动到下一个和上一个制表符。你也可以使用Ngt,其中N是标签号。我有一个讨厌的是,默认情况下,标签号不显示在标签行。为了解决这个问题,我在my .vimrc file(我没有粘贴这里,因为它很长,格式不正确)的末尾放了几个函数。

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

检查名为迷你缓冲区资源管理器的插件,一旦安装和配置,您将能够以与制表符几乎相同的方式使用缓冲区,而不会丢失任何功能。

停,停,停。

这不是Vim标签的设计用途。事实上,它们的名字是错的。更好的名字应该是“viewport”或“layout”,因为这就是标签的含义—它是现有缓冲区所有窗口的不同布局。

试图将Vim转换为1个tab == 1缓冲区是徒劳的。Vim不知道也不关心,它不会在所有命令上尊重它;特别是,任何使用快速修复缓冲区的东西(:make:grep:helpgrep是首先想到的)都会很高兴地忽略制表符,而且你无法阻止这一点。

而不是:

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

我使用类似制表符的缓冲区,使用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。这应该意味着如果缓冲区打开,则切换到现有选项卡,如果没有打开则创建一个新选项卡。

Vim :help window很好地解释了“制表符与缓冲区”的混淆。

缓冲区是文件在内存中的文本 窗口是一个视口 在缓冲区上。

. tab页是窗口的集合

在vim中使用缓冲区来打开多个文件。在其他编辑器(例如notepad++)中,这是通过选项卡完成的,所以vim中的名称选项卡可能会误导。

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

最后,在这个类比中,vim的选项卡页面将对应多个桌面,这是不同的窗口重排。

正如vim help: tab-page所解释的那样,当一个人想临时编辑一个文件,但不想改变当前窗口和缓冲区布局中的任何东西时,可以使用选项卡页。在这种情况下,可以使用另一个选项卡页来编辑特定的文件。

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

与这里的其他一些答案相反,我说您可以随心所欲地使用选项卡。Vim被设计为多功能和可定制的,而不是强迫您根据预定义的参数工作。我们都知道我们程序员喜欢把自己的“道德规范”强加给其他人,所以这个成就当然是一个主要特征。

<C-w>gf是相当于缓冲区的gf命令的制表符。<C-PageUp><C-PageDown>将在制表符之间切换。(在Byobu中,这两个命令从来不适合我,但它们在Byobu/tmux之外工作。可选选项有gtgT.) <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查看该文档。

补充:2013-12-19

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

如果你想让缓冲区像制表符一样工作,请检查tabline插件

它使用单个窗口,并在顶部添加一行来模拟选项卡(仅显示缓冲区列表)。这是在很久以前出现的,当时仅在GVim中支持选项卡,而在命令行vim中不支持。因为它只使用缓冲区,所以一切都与vim的其余部分很好地集成在一起。

这是给那些不熟悉Vim和来自其他文本编辑器的人的答案(在我的例子中是Sublime text)。

我把所有的答案都看了一遍,还是不明白。如果你读得足够多,事情就开始有意义了,但我花了几个小时来来回回地回答问题。

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

选项卡页面,听起来很像选项卡,它们像选项卡,看起来很像大多数其他GUI编辑器中的选项卡,但它们不是。我认为这是建立在Vim上的一个糟糕的思维模型,不幸的是,它掩盖了你在标签页中拥有的额外功能。

我从@crenate的回答中理解的第一个描述是,它们相当于多个桌面。从这方面来看,你只打开了几个桌面,但每个桌面中都打开了许多GUI窗口。

我想说的是,它们类似于其他编辑器/浏览器:

  1. 选项卡组
  2. Sublime Text工作区(即项目中打开文件的列表)

当你看到它们时,你会意识到它们的力量,你可以很容易地将文件(缓冲区)组在一起,例如你的CSS文件,你的HTML文件和你的JS文件在不同的标签页。这实际上是非常棒的。

其他让我感到困惑的描述

视窗

这对我来说毫无意义。虽然它确实有已定义的字典术语,但我只在:help window文档中听到它指的是Vim窗口。Viewport这个词我从来没听过关于Sublime Text、Visual Studio、Atom、notepad++等编辑器的说法。事实上,在我开始尝试使用标签页之前,我从来没有听说过Vim。

如果您像查看多个桌面一样查看选项卡页,那么将一个桌面称为单个窗口似乎很奇怪。

工作区

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

临时使用的存储设备。

它就像一个存储一组缓冲区的地方。

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

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

然而,仔细想想,这确实是一致的。如果你把Vim标签页看作一个Sublime Text项目,那么在每个项目中只打开一个文件并在项目之间不断切换似乎很奇怪。因此,为什么使用标签页只打开一个文件是奇怪的。

窗口集合

:help window这样引用标签页。还有许多其他的答案使用相同的概念。然而,在您了解vim窗口是什么之前,它并没有多大用处,就像在沙子上建造城堡一样。

如上所述,vim窗口与视口相同,并且在linux.com的文章中很好地解释了quiet:

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

如果您曾经通过使用:help主题或按F1键使用过Vim的帮助功能,那么您可能已经熟悉了这个功能。当您输入帮助时,Vim将视口分开,并在顶部视口中打开帮助文档,而在底部视口中打开文档。

我发现标签页被称为窗口的集合而不是缓冲区的集合是很奇怪的。但我猜你可以有两个单独的标签页打开每个指向同一个缓冲区的多个窗口,至少这是我目前为止的理解。

< p >相关: Vim:全局标记可以切换标签,而不是当前标签中的文件? < / p >

也许有助于解决OP的一小部分问题:

    nno \ <Cmd>call To_global_mark()<cr>
fun! To_global_mark()
-tab drop /tmp/useless.md
exe 'normal! `' .. toupper(input("To global mark: "))
endf