为什么使用“{”和“}”动议与 "ap" 和 "ip" 对段落的解释不同?

Why are paragraphs interpreted differently using "{" and "}" motions vs. "ap" and "ip"?

当使用 {} 在段落之间导航时,Vim 似乎将带有白色 space 字符的行视为段落的一部分并跳过经过他们。此行为已在许多线程中进行了讨论,给出的解释(基于 :h paragraph)是“在每个 行之后开始一个段落”,这很好。

然而,这似乎与 Vim 处理 apip 命令的方式不一致,它们实际上处理带有白色 space 字符的行作为段落中断。例如,给定以下文本,其中前两段由非空行分隔(包含白色space),第二段和第三段由空行分隔(并假设光标从顶部开始缓冲区)发生以下情况:

1  abc  # next line contains spaces
2      
3  def  # next line is blank
4  
5  jkl

这两种行为似乎相互矛盾。为什么这两个操作 paragraph 对象的命令的行为不同?

:help ap:help ip 中所述:

Exception: a blank line (only containing white space) is also a paragraph boundary.

因此 ap 的行为是自愿与 } 的行为不同的,并且清楚地记录了差异。然而,这种差异背后的确切原因无处可寻,而且可能会随着时间的流逝而消失。您可能想在 Vim 的官方邮件列表上提问。

总之,我们可以稍微推断一下……

  • Vim的}和vi的}是一致的。这是预料之中的,因为 Vim 的全部目的毕竟是成为一个令人信服的 stand-in for vi.
  • ap(以及文本对象的整个概念)是 Vim 的东西。它不在 vi 中,因此没有可复制的现有行为,添加该功能的人决定让它以比 }.
  • 更直观的方式处理“段落”