Vim中的“开放缓冲区”究竟是什么?

vcirk6k6  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(138)

:ls给出了打开的缓冲区列表。我的观点是一个窗口只能容纳一个缓冲区,并且当前缓冲区=正在编辑的当前文件。如果我一次只打开一个窗口,那么其他“打开的缓冲区”到底是什么?
:ls:browse oldfiles有什么不同?我注意到后者显示了在以前的Vim会话中打开的文件的列表,而没有与当前Vim会话相关的任何内容。那么“打开的缓冲区”是指当前Vim会话中的文件历史吗?
我已经阅读了https://vimhelp.org/windows.txt.html,但无法得出任何关于此问题的结论。

fdx2calv

fdx2calv1#

以下是其他要点......
缓冲区是Vim的“文档”的精确等价物。

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

这正是当你执行$ vim non_existing_file时所发生的,唯一的区别是你得到的叫做“缓冲区”,而不是“文档”。你得到了一个名为non_existing_file的“缓冲区”,但是磁盘上没有文件。

  • 当您在Word中开启现有的档案时,程式会执行与上述相同的动作,并将文件Map至磁盘上的档案。此时,您有两个实体,文件会做为档案的代理。

这正是在Vim中执行:e existing_file时所发生的情况。

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

在Vim中,当存在文档/文件关系时,基本相同::w existing_file用缓冲区existing_file的内容覆盖文件existing_file
当没有文件时,行为稍有不同:如果有缓冲区,Vim将用缓冲区的名称写一个文件,如果缓冲区未命名,则中止并报告。
所有这一切都表明,缓冲区并不像看起来那么奇怪。
如果我一次只打开一个窗口,那么其他“打开的缓冲区”又是什么呢?
就像您可以在Word中同时处理多个“文档”一样,您也可以在Vim中处理多个“缓冲区”。就像您可以在Word中访问其他文档一样,您也可以在Vim中访问其他缓冲区。
在当前会话期间为您创建的每个新缓冲区都被添加到全局“缓冲区列表”中,:ls只是显示这些缓冲区的一种方式,以便您可以针对它们发出命令进行导航或管理。
注意,列表是 global 的,所以无论你在一个窗口还是另一个窗口,或者在一个选项卡页面还是另一个选项卡页面,:ls都会显示相同的列表。
至于为什么你在列表中看到的项目比预期的要多,有很多解释,但用一个最小的可重复案例来解释会更容易。
:ls:browse oldfiles有何不同?
前者列出了 * 在当前会话 * 期间创建的缓冲区。后者列出了在上次写入~/.viminfo文件之前创建的缓冲区,这些缓冲区可以推广到 * 在以前的会话 * 期间创建的缓冲区。

kwvwclae

kwvwclae2#

在Vim语言AFAIK中,“打开缓冲区”不是一个有效的术语。命令:ls显示列出的缓冲区(:ls!显示列出的和未列出的缓冲区)。请参见:h 'buflisted'选项。简而言之,这是一个完全独立的属性。它只用于“过滤掉”一些缓冲区。
帮助也可能使用术语“隐藏”、“可见”和“已加载”。“已加载”表示缓冲区附加了一些文本内容。“可见”-它显示在一个或多个窗口中。请注意,所有“可见”缓冲区都是“已加载”的,但反之亦然。
“hidden”是非正式的,通常意味着一个缓冲区是“加载的”,但不是“可见的”(即在零个窗口中显示)。还要注意的是,可能有很多缓冲区既不是“加载的”也不是“可见的”。这是当前会话的一种“编辑历史”。它们可以在ls输出中浮动,但它们不会占用太多RAM或类似的东西。
oldfiles不是缓冲区。这是从先前执行保留下来的“历史记录”。它可以用来快速重新开启某些档案。然后会建立有效的缓冲区。

相关问题