如果你未曾用過Vim的段移動命令 (`[[`,?`]]`,?`[]`?and?`][`),現在花上幾秒讀讀它們的幫助文檔。 也順便讀讀`:help section`。
還是不懂?這不是什么問題,我第一次讀這些的時候也是這樣。 在寫代碼之前,我們先岔開來學習這些移動是怎么工作的,然后在下一章我們將使得我們的Potion插件支持它們。
## Nroff文件
四個"段移動"命令正如其字面上的含義,可以用來在文件的"段"之間移動。
這些命令默認為[nroff文件][]而設計。 Nroff類似于LaTex或Markdown -- 它是用來寫標記文本的(最終會生成UNIX man頁面)。
Nroff文件使用一組"macro"來定義"段頭"。 比如,這里有個來自于`awk`man頁面的例子:
~~~
.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依舊需要在行開頭有一個點,而且段頭符必須是成對的字符, 所以這樣改對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`吧。
- 前言
- 鳴謝
- 預備知識
- 打印信息
- 設置選項
- 基本映射
- 模式映射
- 精確映射
- Leaders
- 編輯你的Vimrc文件
- Abbreviations
- 更多的Mappings
- 鍛煉你的手指
- 本地緩沖區的選項設置和映射
- 自動命令
- 本地緩沖區縮寫
- 自動命令組
- Operator-Pending映射
- 更多Operator-Pending映射
- 狀態條
- 負責任的編碼
- 變量
- 變量作用域
- 條件語句
- 比較
- 函數
- 函數參數
- 數字
- 字符串
- 字符串函數
- Execute命令
- Normal命令
- 執行normal!
- 基本的正則表達式
- 實例研究:Grep 運算符(Operator),第一部分
- 實例研究:Grep運算符(Operator),第二部分
- 實例研究:Grep運算符(Operator),第三部分
- 列表
- 循環
- 字典
- 切換
- 函數式編程
- 路徑
- 創建一個完整的插件
- 舊社會下的插件配置方式
- 新希望:用Pathogen配置插件
- 檢測文件類型
- 基本語法高亮
- 高級語法高亮
- 更高級的語法高亮
- 基本折疊
- 高級折疊
- 段移動原理
- Potion段移動
- 外部命令
- 自動加載
- 文檔
- 發布
- 還剩下什么?