vim:区别:n和:bn

时间:2016-09-01 06:43:32

标签: vim

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

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

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

2 个答案:

答案 0 :(得分:9)

TL; DR :bn等。总是循环遍历所有缓冲区,:n等依赖于缓冲区的创建方式。

<强>解释

:n:next的缩写,它在参数列表中移动(您可以通过:args查看)

:bn是移动到缓冲区列表中的:bnext的缩写

使用:sp foo打开文件不会更改参数列表,但会添加缓冲区,因此不会更改:n的行为,但会影响:bn

另一方面,如果您使用:n foo打开一个新文件,则会替换参数列表(也会更改:n等的行为,但不会更改:bn et的行为。 al。)。

示例会话:

$ vim /tmp/foo /tmp/bar

:args
[foo] bar

:buffers
  1 %a   "foo"                          line 1
  2      "bar"                          line 0

这里,缓冲区和参数列表匹配

:sp /tmp/sna

:args
[foo] bar

:buffers
  1 #a   "foo"                          line 0
  2      "bar"                          line 0
  3 %a   "sna"                          line 1

现在,有一个新缓冲区,但参数列表是相同的

: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

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

答案 1 :(得分:4)

import { Injectable, Inject } from '@angular/core'; @Injectable() export class AgendaService { } 从当前窗口的缓冲区列表加载下一个缓冲区

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

实际上,参数列表中的每个文件都被加载到缓冲区中,因此被添加到缓冲区列表中,但是,当参数列表的更改可能对缓冲区列表产生一些影响时,更改为缓冲区列表从不对参数列表有任何影响。这意味着两个列表可以相同,但根本不保证。

:next 可以从缓冲区列表加载下一个缓冲区,:n 可以加载参数列表中的下一个文件,但这不应该&# 39;被视为副作用以外的其他任何东西。

在您使用缓冲区时使用:bn和朋友,在使用参数列表时使用:bn和朋友。