为什么使用“{”和“}”动议与 "ap" 和 "ip" 对段落的解释不同?
Why are paragraphs interpreted differently using "{" and "}" motions vs. "ap" and "ip"?
当使用 {
或 }
在段落之间导航时,Vim 似乎将带有白色 space 字符的行视为段落的一部分并跳过经过他们。此行为已在许多线程中进行了讨论,给出的解释(基于 :h paragraph
)是“在每个 空 行之后开始一个段落”,这很好。
然而,这似乎与 Vim 处理 ap
和 ip
命令的方式不一致,它们实际上处理带有白色 space 字符的行作为段落中断。例如,给定以下文本,其中前两段由非空行分隔(包含白色space),第二段和第三段由空行分隔(并假设光标从顶部开始缓冲区)发生以下情况:
1 abc # next line contains spaces
2
3 def # next line is blank
4
5 jkl
}
:将光标移动到第 4 行(即,将第 1-4 行视为一个段落)
dap
:删除第 1 行和第 2 行(即仅将第 1-2 行视为一个段落)
这两种行为似乎相互矛盾。为什么这两个操作 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 中,因此没有可复制的现有行为,添加该功能的人决定让它以比 }
. 更直观的方式处理“段落”
当使用 {
或 }
在段落之间导航时,Vim 似乎将带有白色 space 字符的行视为段落的一部分并跳过经过他们。此行为已在许多线程中进行了讨论,给出的解释(基于 :h paragraph
)是“在每个 空 行之后开始一个段落”,这很好。
然而,这似乎与 Vim 处理 ap
和 ip
命令的方式不一致,它们实际上处理带有白色 space 字符的行作为段落中断。例如,给定以下文本,其中前两段由非空行分隔(包含白色space),第二段和第三段由空行分隔(并假设光标从顶部开始缓冲区)发生以下情况:
1 abc # next line contains spaces
2
3 def # next line is blank
4
5 jkl
}
:将光标移动到第 4 行(即,将第 1-4 行视为一个段落)dap
:删除第 1 行和第 2 行(即仅将第 1-2 行视为一个段落)
这两种行为似乎相互矛盾。为什么这两个操作 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 中,因此没有可复制的现有行为,添加该功能的人决定让它以比}
. 更直观的方式处理“段落”