代码之家  ›  专栏  ›  技术社区  ›  indentation

使用VIM的标签,比如缓冲器

  •  341
  • indentation  · 技术社区  · 18 年前

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

    我希望打开的每个不同的文件都始终在自己的选项卡中。然而,有一些事情阻碍了这一进程。如何修复这些问题:

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

    2. 当切换缓冲区时,我可以使用 :b <part of filename><tab> 它将完成现有缓冲区中文件的名称。 <part of filename> 甚至可以是文件名的中间部分而不是开头。是否有用于切换选项卡的等效项?

    10 回复  |  直到 18 年前
        1
  •  583
  •   OliverUv    14 年前

    停,停,停。

    这不是VIM的选项卡设计用来使用的方式。事实上,他们的名字有误。一个更好的名称是“viewport”或“layout”,因为这是一个标签,它是一个不同的窗口布局。 全部的 你现有的缓冲区。

    试图把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 .
        2
  •  266
  •   phs    9 年前

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

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

    :help switchbuf -这可以控制缓冲区切换行为,试试看 :set switchbuf=usetab,newtab . 这意味着,如果缓冲区打开,则切换到现有选项卡;如果没有,则创建一个新选项卡。

        3
  •  150
  •   icc97    9 年前

    vim :help window 很好地解释了“标签与缓冲区”的混淆。

    缓冲区是文件的内存文本。
    窗口是一个视区 在缓冲器上。
    选项卡页是Windows的集合。

    在VIM中通过以下方式打开多个文件: 缓冲器 . 在其他编辑器(例如记事本+)中,这是通过制表符完成的,因此VIM中的名称制表符可能会产生误导。

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

    最后,在这个类比中,维姆 选项卡页 将对应于多个桌面,即窗口的不同重新排列。

    作为VIM help: tab-page 说明当要临时编辑文件,但不想更改窗口和缓冲区的当前布局时,可以使用选项卡页。在这种情况下,可以使用另一个选项卡页来编辑特定文件。

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

        4
  •  50
  •   Zenexer    12 年前

    与这里的其他一些答案相反,我认为您可以根据需要使用制表符。VIM被设计成通用的和可定制的,而不是强迫您根据预先定义的参数工作。我们都知道我们的程序员是多么喜欢把我们的“道德”强加于其他人,所以这一成就当然是一个主要特征。

    <C-w>gf 制表符是否与buffers“”等效? 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 有一长串命令。一些window命令与选项卡有关,因此您可能希望通过 :help windows .

    增加:2013-12-19

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

        5
  •  15
  •   Dominic Dos Santos    18 年前

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

    查看名为 Mini Buffer Explorer 一旦安装和配置了缓冲区,您将能够以与选项卡相同的方式虚拟地使用缓冲区,而不会丢失任何功能。

        6
  •  7
  •   icc97    9 年前

    这是对那些不熟悉VIM的人和来自其他文本编辑器(在我的例子中是崇高的文本)的答案。

    我通读了所有这些答案,但还是不清楚。如果你通读了足够多的东西开始有意义了,但我花了好几个小时在问题之间来回走动。

    正如其他人所解释的,第一件事是:

    选项卡页 ,听起来很像 制表符 它们的行为就像标签,在大多数其他GUI编辑器中看起来很像标签,但它们不是。我认为这是一个建立在Vim之上的糟糕的心理模型,不幸的是,它模糊了你在标签页中拥有的额外能力。

    我理解的第一个描述来自 @crenate's answer 它们相当于多个桌面。从这方面来看,您只需要打开几台桌面,但每个桌面都有许多GUI窗口。

    我想说,它们与其他编辑器/浏览器中类似:

    1. 选项卡分组
    2. 升华文本工作区(即项目中打开的文件列表)

    当你看到它们的时候,你意识到它们的力量,你可以很容易地将文件集(缓冲区)组合在一起,例如你的CSS文件,你的HTML文件和你的JS文件在不同的标签页中。真是太棒了。

    其他让我觉得困惑的描述

    视口

    这对我来说毫无意义。尽管它确实有一个 defined dictionary term 我只听说过在 :help window 博士。viewport不是我听过的有关高级文本、Visual Studio、Atom、记事本等编辑器的术语。事实上,在我开始尝试使用标签页之前,我从未听说过Vim这样做。

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

    工作空间

    这可能更有意义, dictionary definition 是:

    一种临时使用的存储设备。

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

    我一开始听起来不像 Sublime Text's concept 工作区的列表,其中列出了您在项目中打开的所有文件:

    Sublime工作区文件,其中包含用户特定的数据,如打开的文件和对每个文件的修改。

    不管多想想,这实际上是一致的。如果您将VIM选项卡页视为一个出色的文本项目,那么在每个项目中只打开一个文件并在项目之间不断切换似乎很奇怪。因此,为什么使用标签页只打开一个文件是奇怪的。

    窗口集合

    这个 帮助窗口 以这种方式引用选项卡页。加上许多其他的答案使用相同的概念。然而,直到你的头周围什么是一个VIM窗口,然后这不是太多的用途,就像在沙地上建城堡。

    正如我在上面提到的,VIM窗口与视区是一样的,在这里可以很好地解释安静。 linux.com article :

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

    如果您曾经使用过vim的帮助功能(通过使用:帮助主题或按F1键),那么您可能已经熟悉了此功能。当您输入帮助时,vim将拆分视区并在“顶”视区中打开帮助文档,使文档在“底”视区中保持打开状态。

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

        7
  •  4
  •   Mike G.    18 年前

    看着 帮助标签 看起来维姆不像你想做的那样…

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

    不过,这是个好主意。

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

        8
  •  4
  •   Lucas Oman    18 年前
    • 您可以映射通常操作缓冲区以操作选项卡的命令,正如我在.vimrc中对gf所做的那样:

      map gf :tabe <cfile><CR>
      

      我相信你也可以这样做[^

    • 我认为Vim还不支持Tabs。我使用gt和gt分别移动到下一个和上一个选项卡。您也可以使用ngt,其中n是标签号。我的一个缺点是,默认情况下,标签号不会显示在标签行中。为了解决这个问题,我在 my .vimrc file (我没有粘贴在这里,因为它很长,格式不正确)。

        9
  •  4
  •   jkramer    18 年前

    我使用类似制表符的缓冲区,使用 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,你的顶部没有标签栏,但另一方面,它节省了你屏幕上的空间,而且你可以打开无限多的文件/缓冲区,并且缓冲区列表是可搜索的…

        10
  •  2
  •   icc97    9 年前

    如果希望缓冲区像制表符一样工作,请检查 tabline plugin .

    它使用一个窗口,并在顶部添加一行来模拟选项卡(只显示缓冲区列表)。这在很早以前就出现了,当时标签只在gvim中受支持,而在命令行vim中不受支持。因为它只使用缓冲区,所以所有东西都与VIM的其余部分很好地集成。