vim:区别:n和:bn

hum*_*ngV 10 vim

如果我用这样的多个文件启动vim vim *.java,我可以使用:n:bn(和其他相关命令)循环打开文件.

但是,如果我只使用一个文件并使用:split(稍后关闭拆分窗口)加载其他文件,我可以使用:bn但不使用循环缓冲区:n.

这两种情况有什么区别?如果我这样做:缓冲两种情况,缓冲区列表中没有任何区别.看起来我似乎在问不必要的问题,但我想了解是否有潜伏在引擎盖下的问题.谢谢.

drR*_*rtz 9

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)

现在替换了参数列表,并扩展了缓冲区列表.

  • [Vimcasts](http://vimcasts.org/)一集:[见到arglist](http://vimcasts.org/episodes/meet-the-arglist/) (2认同)

rom*_*inl 5

:bnext从当前窗口的缓冲区列表中加载下一个缓冲区

:next从当前窗口的参数列表中加载下一个文件

实际上,参数列表中的每个文件都被加载到缓冲区中,从而添加到缓冲区列表中,但是,虽然参数列表的更改可能会对缓冲区列表产生一些影响,但缓冲区列表的更改永远不会对参数产生任何影响列表。这意味着这两个列表可以是等价的,但根本无法保证。

:n 可以从缓冲区列表加载下一个缓冲区,:bn 也可以加载参数列表中的下一个文件,但这不应被视为副作用以外的任何事情。

:bn实际使用缓冲区时使用和朋友,使用:n参数列表时使用和朋友。