2008年9月28日 星期日

Vim - 設定外部編排程式

在 irc 上頭有朋友問是否有自動編排程式碼的程式,答案是有的。若要寫 C 你可以使用 GNU 的 Indent ,寫 perl 則有 perltidy 。

在 Ubuntu/Debian 皆有套件可直接安裝使用 GNU Indent。

$ sudo apt-get install indent
GNU Indent 預設為 GNU Style 若要調整程式碼風格,可以在 ~/.indent.pro 內設定。(請參見 man indent 或參考 GNU Indent Manual )

GNU Indent 的使用方式為:

$ indent [filename]
這樣會顯示編排後的程式碼,若用

$ indent file1 > file2
則會在 file2 存入編排後的程式碼。

如果你有使用 vim ,你也可以將 GNU Indent 與 vim 的 [==] 功能做結合 ( 請參見 :help [==] ),vim 內有有名的 gg=G 大絕招可以編排整個檔案,預設是用 vim 去編排的,若要使用外部程式編排,可以使用 set equalprg 功能,在 .vimrc 內設定:

set equalprg=/usr/bin/indent
則在 vim 內選取區域後可按下等號,則 vim 會將此區塊傳至外部程式,再將外部程式的輸出結果替換。

另外透過 autocmd 可以搭配不同的檔案類型設定不同的 indent program。

譬如說我常用 perltidy 那麼可設定

au Filetype perl :set equalprg=perltidy
我所使用的 .perltidyrc:
-l=78
-i=4
-ci=4
-se
-vt=2
-cti=0
-pt=1
-bt=1
-sbt=1
-bbt=1
-nsfs
-nolq
-wbb="% + - * / x != == >= <= =~ !~ < > | & >= < = **= += *= &= <<= &&= -= /= |= >>= ||= .= %= ^= x="
以及 .indent.pro:
-br -nce
-cdb -sc
-bad
-i8
-ci4
-di8
-nbc
-bfda
-bls
-ip0
-hnl