:ls
给出了打开的缓冲区列表。我的观点是一个窗口只能容纳一个缓冲区,并且当前缓冲区=正在编辑的当前文件。如果我一次只打开一个窗口,那么其他“打开的缓冲区”到底是什么?:ls
和:browse oldfiles
有什么不同?我注意到后者显示了在以前的Vim会话中打开的文件的列表,而没有与当前Vim会话相关的任何内容。那么“打开的缓冲区”是指当前Vim会话中的文件历史吗?
我已经阅读了https://vimhelp.org/windows.txt.html,但无法得出任何关于此问题的结论。
:ls
给出了打开的缓冲区列表。我的观点是一个窗口只能容纳一个缓冲区,并且当前缓冲区=正在编辑的当前文件。如果我一次只打开一个窗口,那么其他“打开的缓冲区”到底是什么?:ls
和:browse oldfiles
有什么不同?我注意到后者显示了在以前的Vim会话中打开的文件的列表,而没有与当前Vim会话相关的任何内容。那么“打开的缓冲区”是指当前Vim会话中的文件历史吗?
我已经阅读了https://vimhelp.org/windows.txt.html,但无法得出任何关于此问题的结论。
2条答案
按热度按时间fdx2calv1#
以下是其他要点......
缓冲区是Vim的“文档”的精确等价物。
Document1
。此时,您将拥有一个名为Document1
的“文档”,但磁盘上没有文件。这正是当你执行
$ vim non_existing_file
时所发生的,唯一的区别是你得到的叫做“缓冲区”,而不是“文档”。你得到了一个名为non_existing_file
的“缓冲区”,但是磁盘上没有文件。这正是在Vim中执行
:e existing_file
时所发生的情况。在Vim中,当存在文档/文件关系时,基本相同:
:w existing_file
用缓冲区existing_file
的内容覆盖文件existing_file
。当没有文件时,行为稍有不同:如果有缓冲区,Vim将用缓冲区的名称写一个文件,如果缓冲区未命名,则中止并报告。
所有这一切都表明,缓冲区并不像看起来那么奇怪。
如果我一次只打开一个窗口,那么其他“打开的缓冲区”又是什么呢?
就像您可以在Word中同时处理多个“文档”一样,您也可以在Vim中处理多个“缓冲区”。就像您可以在Word中访问其他文档一样,您也可以在Vim中访问其他缓冲区。
在当前会话期间为您创建的每个新缓冲区都被添加到全局“缓冲区列表”中,
:ls
只是显示这些缓冲区的一种方式,以便您可以针对它们发出命令进行导航或管理。注意,列表是 global 的,所以无论你在一个窗口还是另一个窗口,或者在一个选项卡页面还是另一个选项卡页面,
:ls
都会显示相同的列表。至于为什么你在列表中看到的项目比预期的要多,有很多解释,但用一个最小的可重复案例来解释会更容易。
:ls
与:browse oldfiles
有何不同?前者列出了 * 在当前会话 * 期间创建的缓冲区。后者列出了在上次写入
~/.viminfo
文件之前创建的缓冲区,这些缓冲区可以推广到 * 在以前的会话 * 期间创建的缓冲区。kwvwclae2#
在Vim语言AFAIK中,“打开缓冲区”不是一个有效的术语。命令
:ls
显示列出的缓冲区(:ls!
显示列出的和未列出的缓冲区)。请参见:h 'buflisted'
选项。简而言之,这是一个完全独立的属性。它只用于“过滤掉”一些缓冲区。帮助也可能使用术语“隐藏”、“可见”和“已加载”。“已加载”表示缓冲区附加了一些文本内容。“可见”-它显示在一个或多个窗口中。请注意,所有“可见”缓冲区都是“已加载”的,但反之亦然。
“hidden”是非正式的,通常意味着一个缓冲区是“加载的”,但不是“可见的”(即在零个窗口中显示)。还要注意的是,可能有很多缓冲区既不是“加载的”也不是“可见的”。这是当前会话的一种“编辑历史”。它们可以在
ls
输出中浮动,但它们不会占用太多RAM或类似的东西。oldfiles
不是缓冲区。这是从先前执行保留下来的“历史记录”。它可以用来快速重新开启某些档案。然后会建立有效的缓冲区。