上一講我們是程式員篇的第一講,關于代碼跳轉。代碼跳轉是一個付出很少收獲很大的功能。這一節我們開始一個收獲很多,但是付出也相對多一點功能:代碼折疊。
折疊有下面幾種類型:
Manual: 手動建立折疊。但是退出vim後就一切都沒了。
Marker: 基于特定的字元組合進行折疊。
Expr: 定義正規表達式來處理折疊,這是最終的解決方案。
Indent: 這個最簡單也最基本,根據縮進來折疊。
Syntax: 根據程式語義進行折疊。
我們先看一個例子,左邊是采用syntax方式進行折疊的,右邊是采用indent方式。

從上面的例子可以看到,折疊方式的屬性是跟視窗相關的,每個視窗都設定不同的折疊方式。
設定折疊的方式,是通過設定foldmethod屬性來實作的,例:
折疊指令都是以z字開頭的,對于中國人最友好了,就是折字的拼音首字母麼。
最重要的折疊指令就是za,切換折疊狀态。
za: 切換折疊狀态
zA: 遞歸切換折疊狀态
zo: 打開一個折疊
zc: 關閉一個折疊
zj: 移動到下一個折疊
zk: 移動到上一個折疊
我們可以通過zf指令手動建立折疊。比如上圖中,Pseudo code for int 21那一段我們看着不爽,想把它折疊起來。
我們先切折疊模式:
然後移動到Pseudo那一行,輸入建立指令:
zf是建立折疊指令,後面接指令的範圍,我們要建立這5行的折疊,是以我們用4j向下移動4行。
最後,在這5行上試試zc指令吧,就是下面這個效果:
我們如果可以數出來有幾行的話,可以使用zF指令來建立,例:
上面就建立5行的折疊。
vim雖然功能很全,但是不可能支援每一種我們想要的格式。我們還是需要寫腳本來實作自己的折疊方式的。不過我們還沒有學習vimscript的基礎,這一部分後面我們再補課。