段落移动原理

如果你从来没用 Vim 的段落移动命令([[]][],以及][),那现在就花点时间来阅读它们的帮助文档。 同时也阅读下 :help section

是不是晕了?没关系,我第一次阅读这些内容也是一样。 我们将通过写代码的方式快速学习这些移动是如何工作的,然后在下一章节,我们会创建自己的 Potion 插件来支持它们。

nroff 文件

这4种“段落移动”命令从概念上来说表示在文件的“段落”之间移动。

这些命令都是被设计出来在nroff 文件中默认就能用的。 nroff 是一种类似 Latex 或者 Markdown 的语言 —— 它用来编写文本,然后进行格式化 (实际上就是 UNIX 帮助文档用到的格式)。

nroff 文件用一系列的“宏”来定义“段落头部”。例如,下面是引用的一段 awk 帮助文档:

.SH NAME                                                     ***
awk \- pattern-directed scanning and processing language
.SH SYNOPSIS                                                 ***
.B awk
[
.BI \-F
.I fs
]
[
.BI \-v
.I var=value
]
[
.I 'prog'
|
.BI \-f
.I progfile
]
[
.I file ...
]
.SH DESCRIPTION                                              ***
.I Awk
scans each input
.I file
for lines that match ...

.SH 开始的行就是段落头部。我用 *** 标记了它们。 这4个段落移动命令会使你的光标在这些段落头部行之间移动。

Vim 把任何以 . 和一个 nroff 头部宏开始的行都当作是段落头部行,即使你并不是在编辑 nroff 文件

你可以通过修改 sections 选项来修改宏,但是 Vim 仍会要求在行开始位置有个区间段, 并且宏必须是配对的字符,所以,这个选项并没有给 Potion 文件带来足够的灵活性。

花括号

段落移动命令会寻找另一个东西:左右花括号({ 或者 })作为行的第一个字符。

[[]] 寻找左花括号,而 []][ 寻找右花括号。

这个特别的“骇客功能”允许你在 C 类语言的段落中轻松地移动。 然而,不管在什么类型的文件中,这些规则都是一样的!

把以下文本添加进缓冲:

Test           A B
Test

.SH Hello      A B

Test

{              A
Test
}                B

Test

.H World       A B

Test
Test           A B

现在运行 :set filetype=basic,告诉 Vim 这是一个 BASIC 文件,然后试试段落移动命令。

[[]] 命令会在标记为 A 的行之间移动,而 []][ 会在标记为 B 的行之间移动。

这告诉我们,Vim 总是会使用这两条规则来进行段落移动,即使对于某个语言来说任何一条规则都无意义(比如 BASIC)!

练习

再次阅读 :help section,现在你已经了解了段落移动。

阅读 :help sections 只是看着玩玩。

原文地址:http://learnvimscriptthehardway.stevelosh.com/chapters/50.html