VIM有個
gg=G 格式化代碼指令。
如何自訂這個自訂規則呢?
回複內容:
VIM有個 gg=G 格式化代碼指令。
如何自訂這個自訂規則呢?
這個問題有點大,全說清楚不太現實,說一些基本概念以供參考:
首先對於你想知道的事情,gg=G 裡只有 = 才是關鍵,剩下的只是協助 = 確定作用
範圍而已。
= 的工作機制是這樣的:
- 首先它尋找使用者指定的外部縮排工具,若有則使用該工具對目標範圍進行縮排操作。用
於指定外部縮排工具的選項是 equalprg,你應該看一下關於它的文檔,另外
vimcasts 有一期視頻示範了一個執行個體,在該執行個體中 Drew Neil 示範了如何使用 Par 來
格式化純文字,之後還有一個執行個體示範了用 pandoc 來格式化 HTML。儘管這兩個例子裡
使用的是 formatprg 和 formatexpr 參數(對應的是 gq 而不是 =,即格式化
而不是縮排),但原理和用法卻是相通的。
- 然而
equalprg 預設值是空,如果你沒有合適的外部縮排工具,Vim 就會使用內建的
縮排功能 C-indenting 和 'lisp',這兩個的文檔你也最好看一看。此外若你使用
的 Vim 編譯時間未包含內建縮排功能的話,就會用內建的 indent() 函數來幹活兒——
這是最後的手段了,文檔也值得一看(你自己寫縮排指令碼時可以用到)。
- 還有一個重要的設定是
indentexpr。剛才說過若 equalprg 未設定,= 會使用
C-indenting 和 'lisp' 的功能,但如果此時設定了 indentexpr 的話,則會取
代前面二者以及其他所有的內建縮排運算式(indent-expression)。
如果你對 equalprg 和 indentexpr 傻傻分不清楚,很簡單:前者隻影響 = 的效果
而後者決定所有的縮排功能,比如說我們除了可以使用 = 調整縮排之外,在 INPUT 模
式下換行 Vim 也會自動調整縮排。所以 indentexpr 的影響範圍更大,也是用來自訂
縮排規則的主要手段(同時還有一個 indentkeys 也很有用,這倆的文檔更要好好看)。