vim - 为什么 Vim 专家更喜欢缓冲区而不是选项卡?

标签 vim vi

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

10 个月前关闭。



Improve this question




我不明白缓冲区。当我在同一个选项卡上打开 3 个文件并关闭我的窗口时,当我下次打开其中一个文件时发现有奇怪的交换文件挥之不去并给我带来讨厌的消息时,我通常很恼火。但是我一次又一次地读到这些东西是我错过的生产力必杀技,并且这些标签是为平民使用的。

所以我问你,Vim 专家:使用缓冲区而不是选项卡有什么优势?我看不出有什么不同之处会有很大的不同,但我认为自己只处于操作 Vim 的初级到中级水平。是 :ls :b#真的比gt快得多闲逛?我觉得它必须比这更深入。

最佳答案

正如 ZyX 在 #vim 上所说,这个问题听起来像是“为什么 Vim 专家更喜欢美味而不是温暖?”。

“Vim 专家”不喜欢缓冲区而不是选项卡:他们使用缓冲区作为它们的文件代理,并将标签页用作它们的工作区。缓冲区和标签页有不同的用途,所以 偏爱其中一个没有任何意义。

缓冲区和制表符的问题是一种混淆,由独立事实的组合引起。

  • 大多数“现代”文本编辑器和 IDE 使用选项卡比喻来表示加载的文件。这个比喻充当一个信息系统——它向用户显示哪些文件被打开及其状态——并且作为一个交互设备——它允许用户操作(重新排序、选择、关闭……)那些打开的文件。尽管有许多限制,但标签无处不在,人们已经习惯了它们并期望它们无处不在。
  • Vim 在 7.0 中引入了标签页作为其用户创建临时“工作区”的一种方式。它们的功能、特定选项、特定命令或 :help 中没有任何内容。部分建议标签页可以或应该用作文件代理。

    当然,除了“标签页”的名称和外观之外,什么也没有,这会导致很多困惑。
  • :set hidden ,默认情况下禁用并且不太容易找到,Vim 使得在不写入当前缓冲区或放弃其更改的情况下无法切换到另一个缓冲区。不知道该选项的新用户别无选择,只能转向大量使用 Windows 或他们可以找到的最接近的“类似标签”的功能:标签页。

  • “标签页”是该功能的一个不幸的名称选择,尤其是在一个认为阅读文档是浪费时间的时代。

    在 Vim 中,标签页是建立在窗口之上的抽象,它本身是建立在缓冲区之上的抽象。每个新级别都会添加有用的功能,但会限制您的工作流程。

    “缓冲方式”

    使用基于缓冲区的工作流,您正在处理的文件沿单个维度分布。您可以循环浏览您的缓冲区,您可以通过键入其名称的一部分(带完成)或其编号来访问特定的缓冲区,您可以在缓冲区之间交替,您可以很容易地定位它们。基本没有摩擦。
  • 八个缓冲区打开,只有一个可见:

    Eight buffers open
  • 按号码切换:

    Switching by number
  • 按名称切换:

    Switching by name

  • 缓冲区是 Vim 的文件代理。如果您从文件的角度考虑,您就会从缓冲区的角度考虑。

    “窗口方式”

    使用基于窗口的工作流,您的"file"都沿着相同的单个“虚拟”维度分布,就像您只使用缓冲区和其他两个“物理”维度一样。但是找到这些维度的笛卡尔空间几乎完全分开:移动到另一个缓冲区仍然意味着“移动到另一个文件”,但移动到另一个窗口则不然。对应于所需文件的缓冲区可能会显示在该窗口中,但它也可以显示在另一个窗口中,可能在另一个标签页中,或者根本不显示。

    使用 Windows,即使使用 'switchbuf',在打开的文件之间导航也变得过于复杂或过于简单。和 :sb .主要是因为您被迫将两组命令用于本质上相同的事情:访问缓冲区。

    Windows 有它们的用途,如下所述,但它们不具备替换任何人工作流程中的缓冲区所需的功能。

    在这里,我正在研究 Vim 配色方案。这两个窗口是同一个缓冲区的不同 View :顶部一个用作引用,带有颜色方案中使用的颜色代码表,底部一个是我工作的地方:

    Working on a colorscheme

    Windows 不是作为文件代理设计的,也不能做成文件代理:它们是“容器”或“视口(viewport)”,旨在为您提供缓冲区的 View 。不多也不少。

    “标签方式”

    使用基于选项卡的工作流程,您实际上是在尝试模仿以前编辑器中习惯的用户体验,同时完全忽略 Vim 选项卡页面的本质。如果我们暂时忘记这种策略通常是非常低效的,那么也不可能像 Windows 一样强制 Vim 坚持“一个文件 = 一个选项卡”的范式而不会丢失 很多的灵活性。

    仍然使用与上述相同的文件,tabline 占用了大量空间,几乎没有任何好处。我所有的文件和标签都被称为 javascript*.vim所以我做不到 3gt并确信我会在正确的地方结束,不可能按名称到达特定的标签。除此之外,它的标签很可能是非常无用但完全合乎逻辑的[Quickfix List] … 由于没有实用的方法将文件/缓冲区绑定(bind)到标签页,因此您基本上只剩下一种实用的方法在标签页/缓冲区/文件之间导航:循环。

    是的,我的标签只有 8 个标签,想象一下,如果我有 20 个!
  • 在八个标签页中打开八个缓冲区 (错)

    Wrong
  • 两个特定任务的两个选项卡 (右)

    Right

  • 标签页是设计用来包含一个或多个窗口的“容器”或“视口(viewport)”,它们本身也是用来包含缓冲区的“容器”。

    综上所述

    “Vim 专家”(假设我可以像我一样说话)不要更喜欢缓冲区而不是选项卡:他们只是按照 Vim 的设计使用它,并且对这种设计非常满意:
  • “Vim 专家”加载了 2、30 或 97 个缓冲区,很高兴他们不必处理空间分布;
  • 当他们需要比较两个文件或在当前缓冲区的一个部分中工作同时保留另一个作为引用时,“Vim 专家”使用 windows,因为这就是它们的用途;
  • 当他们需要在项目的一个单独部分工作一段时间而不影响他们当前的 View 时,“Vim 专家”会加载一个全新的标签页。
  • 关于vim - 为什么 Vim 专家更喜欢缓冲区而不是选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26708822/

    相关文章:

    用于创建新编号文件的 vimscript 代码

    vim - 设置 vimwiki 默认值

    vim - 删除 unicode 组合字符 - vim

    python - 在 vi 编辑器中运行 python 代码并传递用户输入

    Git 使用 Vim 来提交消息

    vim - 如何删除以 [ 开头并以 ] 结尾的多个单词

    bash - 如何让 tmux 仅在 vim 未运行时应用选项?

    Vim:改变鼠标点击行为

    javascript - 有人知道在 vi 中突出显示 Objective-J 语法吗?

    python - vim 以红色突出显示所有内容