如果你从来都没有使用过Vim的区块移动命令([[
,]]
,[]
,][
),先花一点时间阅读一下说明文档。现在就开始阅读:help section
的内容。
是不是有点迷惑了?这是正常的,我第一次读这些内容也是这样的感受。我们将要通过写代码的方式来迂回地学习这些移动是怎么运作的,然后,在下一节里让我们的Potion插件来支持它们。
“区块移动”的四个命令概念上都是用来在文件的“区块”上来进行移动的。Nroff是一个和LaTex或者MarkDown相似的语言——它是用来编写那些以后需要来格式化的文本的(其实这就是UNIX man page 所使用的格式)。
Nroff 文件使用一些特定的“宏”来定义“区块头”。例如,下面是一段取自awk
man page的内容:
.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
开头的都是区块头,我在上面通过***
把它们给标记出来了。那四个区块移动的命令都是用来在这些区块头直接移动光标的。
Vim会把所有以.
以及所有的nroff区块头的“宏”开始的文本行作为区块头进行处理,哪怕你编辑的不是一个nroff文件。
你可以通过修改sections
设置的方式来修改这些宏,但是Vim还是需要你在文本行的开头通过点号来开始,并且这些宏都要是成对的字符,这样的话,这些设置就不会给Portion文件带来过多的灵活性。
区块移动命令也会查找另外一个东西:一个开或者关的花括号({
或者}
)作为一行的开头。
[[
和]]
查找左花括号,[]
和][
查找右花括号。
这个额外的小功能可以让你在类似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
来娱乐一下。