首页 文章

使用像缓冲区这样的Vim选项卡

提问于
浏览
339

我已经看过在Vim中使用选项卡的能力(使用 :tabe:tabnew 等)来替代我目前在隐藏缓冲区中的同一窗口中打开许多文件的做法 .

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

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

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

10 回答

  • 15
    • 您可以映射通常操作缓冲区的命令来操作选项卡,就像我在.vimrc中使用gf一样:
    map gf :tabe <cfile><CR>
    

    我相信你也可以用[^

    • 我不认为vim支持这个标签(尚未) . 我使用gt和gT分别移动到下一个和上一个选项卡 . 您也可以使用Ngt,其中N是标签号 . 我有一个问题是,默认情况下,选项卡号不会显示在选项卡行中 . 为了解决这个问题,我在my .vimrc file的末尾添加了几个函数(我没有't paste here because it'长并且格式不正确) .
  • 48

    停止,停止,停止 .

    这不是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 namectrl-6 在缓冲区之间切换 . 我喜欢 ctrl-6 我自己(单独切换到之前使用的缓冲区,或 #ctrl-6 切换到缓冲区编号 # ) .

    • 使用 :ls 列出缓冲区,或MiniBufExplBufExplorer等插件 .

  • 3

    在这里聚会迟到但很惊讶我在这个列表中没有看到以下内容:

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

    :help switchbuf - 这控制缓冲区切换行为,请尝试 :set switchbuf=usetab,newtab . 这应该意味着如果缓冲区打开则切换到现有选项卡,或者如果没有则创建新选项卡 .

  • 4

    Vim :help window 很好地解释了混淆"tabs vs buffers" .

    缓冲区是文件的内存中文本 . 窗口是缓冲区上的视口 . 标签页是一组窗口 .

    使用 buffers 在vim中打开多个文件 . 在其他编辑器(例如记事本)中,这是通过选项卡完成的,因此vim中的名称选项卡可能会产生误导 .

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

    最后在这个类比中,vim的 tab pages 将对应于多个桌面,即不同的窗口重新排列 .

    正如vim help: tab-page 解释的那样,当一个人想要暂时编辑一个文件但又不想改变当前windows和缓冲区布局中的任何内容时,可以使用一个标签页 . 在这种情况下,可以仅使用另一个标签页来编辑该特定文件 .

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

  • 579

    与此处的其他一些答案相反,我说您可以根据需要使用制表符 . 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 查看该文档 .

    Addition: 2013-12-19

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

  • 148

    我遇到了同样的问题 . 我希望标签像缓冲区一样工作,我从来没有设法让它们 . 我最终解决的解决方案是使缓冲区表现得像标签!

    查看名为Mini Buffer Explorer的插件,一旦安装和配置,您将能够以与标签相同的方式使用缓冲区,而不会丢失任何功能 .

  • 6

    对于那些不熟悉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,它是您在项目中打开的所有文件的列表:

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

    然而,考虑更多,这确实同意 . 如果您将Vim标签页视为Sublime Text项目,那么在每个项目中只打开一个文件并在项目之间切换似乎很奇怪 . 因此,为什么使用标签页只打开一个文件是奇怪的 .

    窗户的集合

    :help window 以这种方式引用标签页 . 还有许多其他答案使用相同的概念 . 然而,直到你了解一下vim窗口是什么,那就没什么用了,就像在沙滩上建造城堡一样 .

    正如我上面提到的,vim窗口与视口相同,并且在_1111580中非常好地解释了:

    Vim中一个非常有用的功能是能够在一个或多个文件之间拆分可视区域,或者只是拆分窗口以更容易地查看同一文件的两个位 . Vim文档可以互换地将其称为视口或窗口 . 如果您曾使用过:帮助主题或按F1键使用过Vim的帮助功能,则您可能已经熟悉此功能 . 当您输入帮助时,Vim会拆分视口并在顶部视口中打开帮助文档,使文档在底部视口中保持打开状态 .

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

  • 2

    看看:帮助标签它看起来不像vim想要像你那样工作......

    缓冲区在选项卡之间共享,因此似乎无法锁定给定缓冲区以仅显示在某个选项卡上 .

    不过,这是一个好主意 .

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

  • 266

    我用缓冲区,如选项卡,使用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,顶部没有标签栏,但另一方面它可以节省屏幕空间,而且可以打开无限数量的文件/缓冲区,并且可以搜索缓冲区列表......

  • 4

    如果您希望缓冲区像标签一样工作,请查看tabline plugin .

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

相关问题