Vim文本对象ip和ap有什么区别?

What Are the Differences Between the Vim Text Objects ip and ap?

Vim 手册对它们进行了完全相同的描述。来自 Vim 手册:

ap: "a paragraph", select [count] paragraphs. Exception: a blank line (only containing white space) is also a paragraph boundary. When used in Visual mode it is made linewise.

ip: "inner paragraph", select [count] paragraphs. Exception: a blank line (only containing white space) is also a paragraph boundary. When used in Visual mode it is made linewise.

因此,我并不完全清楚它们之间的区别。例如,假设您有命令 gqapgqip。他们的行为有何不同?

同样,仅仅阅读 :help ap 因为有人给了你 link,没有适当的背景,你将一事无成,只会带来更多的困惑。

文本对象可以有两种类型:包含边界的文本对象和排除边界的文本对象。

按照惯例,包含边界的文本对象以 a 开头,如 ap,而排除边界的文本对象以 i 开头,如 ip

:help paragraph 解释了“段落”的构成,link 来自 :help ip:help ap。具体来说,一个段落的边界是:

  • 一个非空行前面有一个空行,将其视为零宽度匹配,
  • 下一个空行。

所以你有 ip,它排除了空行,ap,它包括它:

[...] end of paragraph above.

Beginning of paragraph in the middle    |       |
with some boring filler text so that    | ip    | ap
it covers a few lines.                  |       |
                                                |
Beginning of paragraph below [...]

在段落上执行 gq 时,使用 ipap 并不重要,因为额外的空行不太可能改变对段落所做的任何事情文本。 ipap 在这里有点例外,因为两种类型的文本对象之间的差异通常很重要:

             it
    ----------------------
<h2>One day I will be a H1</h2>
-------------------------------
             at

有关该主题的参考,请参阅 :help text-objects,有关更温和的介绍,请参阅 :help 04.8

正如我在其他回答中提到的,适当的学习可以让你培养一种直觉,这种直觉很难从随机的、不连贯的、links 和推文等中建立起来。