如果我用这样的多个文件启动vim vim *.java,我可以使用:n或:bn(和其他相关命令)循环打开文件.
但是,如果我只使用一个文件并使用:split(稍后关闭拆分窗口)加载其他文件,我可以使用:bn但不使用循环缓冲区:n.
这两种情况有什么区别?如果我这样做:缓冲两种情况,缓冲区列表中没有任何区别.看起来我似乎在问不必要的问题,但我想了解是否有潜伏在引擎盖下的问题.谢谢.
TL; DR::bn等.总是循环遍历所有缓冲区,:n等等取决于缓冲区的创建方式.
说明:
:n是:next参数列表中的移动的缩写(您可以通过执行查看:args)
:bn是:bnext缓冲列表中移动的缩写
打开文件:sp foo不会改变参数列表,但会添加缓冲区,因此不会改变行为:n,但会影响:bn.
另一方面,如果你打开一个新的文件:n foo,它将替换参数列表(也改变了:net al 的行为,但不改变等人的行为:bn).
一个示例会话:
$ vim /tmp/foo /tmp/bar
:args
[foo] bar
:buffers
1 %a "foo" line 1
2 "bar" line 0
Run Code Online (Sandbox Code Playgroud)
这里,缓冲区和参数列表匹配
:sp /tmp/sna
:args
[foo] bar
:buffers
1 #a "foo" line 0
2 "bar" line 0
3 %a "sna" line 1
Run Code Online (Sandbox Code Playgroud)
现在,有一个新缓冲区,但参数列表是相同的
:n /tmp/test /tmp/baz
:args
[test] baz
:buffers
1 a "foo" line 0
2 "bar" line 0
3 # "sna" line 1
4 %a "test" line 1
5 "baz" line 0
Run Code Online (Sandbox Code Playgroud)
现在替换了参数列表,并扩展了缓冲区列表.
:bnext从当前窗口的缓冲区列表中加载下一个缓冲区。
:next从当前窗口的参数列表中加载下一个文件。
实际上,参数列表中的每个文件都被加载到缓冲区中,从而添加到缓冲区列表中,但是,虽然参数列表的更改可能会对缓冲区列表产生一些影响,但缓冲区列表的更改永远不会对参数产生任何影响列表。这意味着这两个列表可以是等价的,但根本无法保证。
:n 可以从缓冲区列表加载下一个缓冲区,:bn 也可以加载参数列表中的下一个文件,但这不应被视为副作用以外的任何事情。
:bn实际使用缓冲区时使用和朋友,使用:n参数列表时使用和朋友。