小编典典

为什么 Vim 专家更喜欢缓冲区而不是制表符?

all

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

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


阅读 72

收藏
2022-04-18

共1个答案

小编典典

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

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

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

  1. 大多数“现代”文本编辑器和 IDE 使用 选项卡 隐喻来表示加载的文件。该隐喻充当信息系统——它向用户显示打开了哪些文件及其状态——以及作为交互式设备——它允许用户操作(重新排序、选择、关闭)那些打开的文件。尽管标签有很多限制,但标签无处不在,人们已经习惯了它们并 期待 它们无处不在。

  2. Vim 在 7.0 中引入了 标签页 作为其用户创建临时“工作区”的一种方式。它们的功能、特定选项、特定命令或:help部分中没有任何内容表明标签页可以或应该用作文件代理。

当然,除了“标签页”的名称 外观之外,什么都没有,这会导致很多混乱。

  1. 如果没有:set hidden,默认情况下是禁用的并且不容易找到,Vim 使得在不写入当前缓冲区或放弃其更改的情况下无法切换到另一个缓冲区。不知道该选项的新用户别无选择,只能转向使用繁重的窗口或使用他们可以找到的最接近的“类似标签”的功能:标签页。

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

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

“缓冲方式”

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

  1. 八个缓冲区打开,只有一个可见:

八个缓冲区打开

  1. 按号码切换:

按号码切换

  1. 按名称切换:

按名称切换

缓冲区是 Vim 的文件代理。 如果您考虑文件,那么您会考虑缓冲区。

“窗口方式”

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

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

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

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

处理配色方案

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

“标签方式”

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

仍然使用与上面相同的文件,tabline
占用了大量空间,几乎没有任何好处。我所有的文件和我的所有选项卡都被调用javascript*.vim,所以我不能做3gt并且确信我最终会在正确的位置,并且不可能通过名称到达特定的选项卡。除此之外,它的标签很可能是非常无用但完全合乎逻辑的[Quickfix List]事实——由于没有实用的方法将文件/缓冲区绑定到标签页,因此基本上只剩下一种实用的方法来在标签之间导航页面/缓冲区/文件:循环。

是的,我的标签线只有 8 个标签,想象一下如果我有 20 个!

  1. 在八个标签页中打开八个缓冲区 (错误)

错误的

  1. 两个特定任务的两个选项卡 (右)

对

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

综上所述

“Vim 专家”(假设我可以说我是一个) 不喜欢​​缓冲区而不是选项卡: 他们只是使用 Vim 的设计,并且对这种设计非常满意:

  • “Vim 专家”加载了 2、30 或 97 个缓冲区,并且很高兴他们不必处理空间分布;

  • 当他们需要比较两个文件或在当前缓冲区的一个部分工作同时保留另一个作为参考时,“Vim 专家”使用窗口,因为这就是它们的用途;

  • 当他们需要在项目的一个单独部分上工作一段时间而不打乱他们当前的视图时,“Vim 专家”会加载一个全新的标签页。

2022-04-18