Vim 中的“开放缓冲区”到底是什么?

D.B*_*B.K 1 vim neovim

:ls给出打开缓冲区的列表. 我认为一个窗口只能容纳一个缓冲区,并且当前缓冲区=当前正在编辑的文件。如果我一次只打开一个窗口,那么其他“打开的缓冲区”到底是什么?

与有何:ls不同:browse oldfiles?我注意到后者向我显示了之前 Vim 会话中打开的文件列表,与当前 Vim 会话没有任何关系。那么“打开缓冲区”是否意味着当前 Vim 会话中的文件历史记录?

我已阅读https://vimhelp.org/windows.txt.html,但无法得出任何关于此的结论。

rom*_*inl 5

这里是附加点\xe2\x80\xa6

\n

缓冲区与 Vim 完全相同,相当于更熟悉的程序中的“文档”。

\n
    \n
  • 当您在 Word 中创建新文档时,程序会在内存中分配一些空间,并为其指定一个临时名称,例如Document1. 此时,您已经有了一个名为“文档”的文件Document1,但磁盘上没有文件。

    \n

    这正是您执行此操作时所发生的情况$ vim non_existing_file,唯一的区别是您得到的称为“缓冲区”,而不是“文档”。您得到一个名为 的“缓冲区” non_existing_file,但磁盘上没有文件。

    \n
  • \n
  • 当您在 Word 中打开现有文件时,程序会执行与上述相同的操作,并将文档映射到磁盘上的文件。此时,您有两个实体,文档充当文件的代理。

    \n

    这正是当你这样做时发生的事情:e existing_file在 Vim 中所做的事情。

    \n
  • \n
  • 当您在 Word 中保存文档时,程序实际上会尝试协调文档的状态和文件的状态。如果没有与该文档关联的文件,则系统会提示您创建一个文件,如果有,则该文件将以透明方式写入。

    \n

    当存在文档/文件关系时,Vim 中的情况基本相同:用缓冲区的内容:w existing_file覆盖文件。existing_fileexisting_file

    \n

    当没有文件时,行为略有不同:如果有文件,Vim 将使用缓冲区名称写入一个文件;如果缓冲区未命名,则中止并抱怨。

    \n
  • \n
\n

综上所述,缓冲区并不是一个看起来那么奇怪的概念。

\n
\n

如果我一次只打开一个窗口,那么其他“打开的缓冲区”到底是什么?

\n
\n

就像您可以在 Word 中同时处理多个“文档”一样,您可以在 Vim 中处理多个“缓冲区”。就像您可以访问 Word 中的其他文档一样,您可以访问 Vim 中的其他缓冲区。

\n

在当前会话期间代表您创建的每个新缓冲区都会添加到全局“缓冲区列表”中,并且:ls只是显示这些缓冲区的一种方式,以便您可以针对它们发出命令以进行导航或管理。

\n

请注意,该列表是全局的,因此:ls无论您在一个窗口或另一个窗口中,还是在一个选项卡页或另一个选项卡页中,都会显示相同的列表。请参阅我关于缓冲区、窗口和选项卡页之间关系的另一个答案。

\n

至于为什么您在列表中看到的项目比预期多,有很多解释,但用最小的可重现案例来解释会更容易。

\n
\n

与有何:ls不同:browse oldfiles

\n
\n

前者列出了当前会话期间创建的缓冲区。后者列出了上次~/.viminfo写入文件之前创建的缓冲区,这些缓冲区可以概括为在先前会话期间创建的缓冲区。

\n