Vim 缓冲区完整指南

维姆 一直是最流行的文本编辑器之一,它也影响其他 IDE 的扩展。

如果您是高级 Vim 用户,您可能正在使用终端多路复用器,例如 tmux 或 screen。

这可以工作,但它不是做事的“Vim 方式”。

那么,如何在不关闭一个文件并打开另一个文件的情况下一次编辑多个文件呢? 好吧,让我向您介绍 Vim 缓冲区!

Vim 中的缓冲区是什么?

从技术上讲,缓冲区是加载到内存中的任何东西,它将在不久的将来使用。 中的绿色进度条 YouTube 视频是一个很好的 example 的缓冲区。 现在,在 Vim 上下文中谈论缓冲区,它意味着您在 Vim 中打开的任何文件,这些文件存储在内存中以供编辑。

创建新缓冲区

既然您知道缓冲区是什么以及它在 Vim 中的用途,让我们来看看如何在 Vim 中创建新缓冲区,即同时在 Vim 中打开多个文件。

编辑命令

Vim 有 :edit 您可以在活动的 Vim 会话中打开要编辑的文件的命令。 或者,您可以使用 :e 如果您想在 Vim 中真正高效,请使用命令。

:edit <filename>

如果存在具有该名称的文件,它将被加载到 主动缓冲器,否则,将创建一个新文件。

有了它,您可以开始编辑“当前缓冲区”(打开的文件)。

如您所见,首先,我使用 :e 命令和 Vim 立即将该文件加载到活动缓冲区中。 接下来,我加载“node.rs”并将“node.rs”放入活动缓冲区,替换“main.rs”。 最后,我将“platform.rs”文件加载到活动缓冲区中,该文件替换了活动缓冲区中的前一个文件。

这样做,我在活动缓冲区中加载了三个文件,使用 :e 命令。

坏命令

这不是“坏”的错字。 Vim 有 :badd 命令。 像 b-add 或 buffer-add 一样阅读它,你就会明白它的含义。

如果您更喜欢使用较短版本的命令,可以使用 :bad 命令。

顾名思义,它接受一个文件名参数并将其添加到缓冲区中。

:badd <filename>

和…之间的不同 :edit:badd 命令是当你使用 :edit指定的文件会被加载到缓冲区中,是的,但是会在 主动缓冲器. 意思是,如果您正在编辑文件并使用 :edit 命令,您指定的文件将显示在当前窗口中。

然而,当你使用 :badd 命令,您指定的文件将在后台加载到缓冲区中。

让我们看一个 example.

正如您从这个 gif 中看到的,最初我没有打开文件,然后我使用将“main.rs”添加到缓冲区 :badd 命令,但没有立即打开“main.rs”进行编辑。 我还将“utils.rs”添加到缓冲区,我仍然在没有任何名称的空文件上。

拆分窗口

您可能已经知道,Vim 支持创建水平和垂直拆分窗格。 自然,这样您就可以同时打开多个文件进行查看和编辑。

在 Vim 中有几种创建拆分的方法。

使用任一 :split:vsplit 命令并指定文件名以分别创建水平拆分和垂直拆分。 或者,您可以使用 :sp:vs 简称commands,用于各自的命令。

:split <filename>
:vsplit <filename>
在拆分窗口中打开缓冲区

显示打开的缓冲区

在了解缓冲区之间的切换之前,您必须知道缓冲区中当前加载了哪些文件以及如何查看这些打开的缓冲区。

您可以使用三个命令来列出打开的缓冲区,它们在下面列出:

:ls
:files
:buffers
使用

当你列出缓冲区时,它会给你一些细节……

首先,它会给你一个在缓冲区中打开的每个文件的索引,这样你就可以在缓冲区之间切换而无需输入整个文件名。

如果缓冲区处于活动状态,在当前窗口中,它将显示一个 % 文件名前的符号。 此外,如果它是活动缓冲区,则 a 符号将显示在文件名之前。

以下标志还显示了有关缓冲区的更多信息:

  • % :当前窗口中的缓冲区
  • # :备用缓冲区(当前窗口中最近编辑的最后一个文件)
  • a :活动缓冲区(当前窗口中正在编辑的文件)
  • h :隐藏缓冲区(未保存修改但未显示在任何窗口中的缓冲区)
  • u : 未列出的缓冲区(未在 Vim 中打开但存在于当前工作目录中的文件;使用 :ls! 查看这个)
  • - :“可修改”设置为关闭的缓冲区
  • = : 只读缓冲区
  • + : 修改后的缓冲区(未写入磁盘的更改的缓冲区)
  • x : 有读取错误的缓冲区

这些缓冲区标志可以组合在一起以描绘特定的含义。

使用“ls”命令的缓冲区中的几个文件的图像

最常见的 example 是 %a,这意味着所述缓冲区在当前窗口中是“打开的”(正在编辑)。

缓冲区中文件的图像被隐藏并对其进行了一些修改

让我们看看另一个 example. 在这里,我对“a.rs”文件进行了一些编辑并使用 :set hidden 命令。 然后我切换到编辑“main.c”,而没有写出我对“a.rs”所做的任何修改。

现在’a.rs’的标志正好表明了这一点 #h + 标志。

  • # -> 这是当前窗口中要编辑的最后一个文件(在我切换到编辑“main.c”之前)
  • h -> 这是一个隐藏缓冲区
  • + -> 已修改但未将更改保存到磁盘

额外的

如果缓冲区中有一些文件,您可以使用以下任一命令在每个单独的窗口中打开所有文件进行编辑:

  • :ball -> 进行 n 个水平分割并在 windows 中打开所有文件(其中 n 是缓冲区中的文件数)
  • :vertical ball -> 进行 n 个垂直分割并在窗口中打开它们(同样,n 是缓冲区中的文件数)
Vim 的使用 "球" 和 "垂直球" 命令

删除缓冲区

当打开不再需要的缓冲区时,最好将其删除。 如果您不打算再编辑它,为什么要在缓冲区中保持打开文件?

为此,您可以使用 :bdelete 命令连同缓冲区名称(或其索引)将其从缓冲区中删除。 您还可以使用 :bd 如果您有点懒惰,请命令。

:bdelete <filename>
在 Vim 中删除缓冲区

与 Vim 中的所有内容一样,您甚至可以通过指定范围来一次删除多个缓冲区。 如果您想删除缓冲区 1、2、3 和 4,下面是一个命令:

:1,4bd
在 Vim 中删除一系列缓冲区

在缓冲区之间移动

现在您已经知道如何将文件附加到缓冲区,如何从缓冲区中删除它们,以及列出在缓冲区中打开的文件,让我们看看如何在不退出 Vim 的情况下从编辑一个文件切换到另一个文件。

有几种方法可以在缓冲区之间切换。

切换到特定缓冲区

大多数时候,在编辑多个文件时,您只在几个选定文件之间来回切换,而不是打开每个文件。

当您需要从一个文件切换到另一个文件时,请使用 :buffer 命令,或 :b 简而言之。

:buffer <filename>
使用“buffer”命令在打开的缓冲区之间切换

知道缓冲区编号后,只需使用以下命令提及其名称即可切换到所需的缓冲区:

:bufferN

这里 N 是缓冲区号。

在 Vim 中通过索引使用“buffer”命令在打开的缓冲区之间切换

在缓冲区之间连续切换

由于每个缓冲区都有一个唯一的编号,并且编号不会改变,因此您可以轻松地从打开的缓冲区列表中跳转到下一个或上一个缓冲区。

当你想切换到下一个缓冲区时,使用 :bnext 命令。 与大多数 Vim 命令一样,存在一个较短的命令,即 :bn.

:bnext

要切换到上一个缓冲区,您可以使用 :bprevious 命令。 而切换到前一个缓冲区的short-to-type命令是 :bp.

:bprevious
在 Vim 中使用“bprevious”和“bnext”命令在缓冲区之间来回切换

跳转到第一个和最后一个缓冲区

您可以轻松使用该命令 :b1 切换到第一个缓冲区,但是如何在不知道其索引的情况下切换到最后一个缓冲区?

Vim 中有一些命令可以做到这一点!

如果要跳转到第一个缓冲区,请使用 :bfirst 命令,或 :bf 如果你像我一样懒惰。

:bfirst

并且,跳转到最后一个缓冲区 [without knowing its number], 使用 :blast 命令,或 :bl 命令。

:blast
在 Vim 中的第一个和最后一个缓冲区之间切换

隐藏缓冲区

当您在修改了活动缓冲区后尝试在缓冲区之间切换时,Vim 会在切换到另一个缓冲区之前询问您是要放弃更改还是保存它们。

这可能很烦人。 要禁用该消息(每个缓冲区、每个会话),请使用 :set hidden 命令。

:set hidden
在 Vim 中隐藏缓冲区以在缓冲区之间切换而不保存或不丢弃更改

这会将更改保留在“内存中”。 您所做的更改不会被丢弃,也不会写入磁盘。 它们将被“保存在缓冲区中”,以便稍后处理。

现在,当您从修改过的缓冲区切换到另一个缓冲区时,Vim 不会一直询问您是否要保存更改。

如果您希望它自动应用于每个文件,最好将以下行添加到您的 ‘vimrc’ 文件中:

set hidden

这样你就不用跑了 :set hidden 每次打开 Vim 时对每个缓冲区执行命令。

结论

本文深入介绍了您可以用来在 Vim 中操作缓冲区的几乎所有操作。

如果你想学习像这样的高级 Vim 主题,我强烈建议使用 Jovica Ilic 的 Vim 培训。