2008/12/29

Vim 建議的四種 TAB 字元處理方式

Vim 的 help 建議四種 TAB 字元處理方式:
  1. 將 'tabstop' 固定設為 8;'softtabstop' 和 'shiftwidth' 設為 4 (或其他你所喜好的縮排長度);然後指定 'noexpandtab'。這樣,vim 在處理檔案的時候會視需求自動混用 TAB 和空白字元,但你按 TAB 或 BS 鍵時,都會以 4 格 (或你喜好的縮排長度) 來移動。

  2. 將 'tabstop' 和 'shiftwidth' 設成你所喜好的縮排長度,然後設定 'expandtab'。這樣,你編輯的檔案將不會有任何 TAB 字元。以其他編輯器來看時,縮排不會受到 TAB 設定不同的影響。

  3. 將 'tabstop' 和 'shiftwidth' 設成你所喜好的縮排長度,然後將此設定以 modeline 的方式寫在檔案之中。這樣,只要使用 vim 而且 modeline 有開啟的話,大家看到的樣子都會一致。

  4. 將 'tabstop' 和 'shiftwidth' 設成相同的值,然後設 'noexpandtab'。這樣,即使別人的設定不一樣,看起來也只是縮排程度不同,結構上是沒有問題的。不過,你只能在每一行的開頭使用 TAB 字元,其他地方的 TAB 字元可能會因縮排長度的不同而破壞原來的排版 (例如:原本對齊的 C 常數定義變沒有對齊)。
個人推薦方式 2 再嵌入 modeline 設定,如下:
vim: set et ts=4 sw=4:
嵌入 modeline 設定不單純只給 vim 看,而是當作一種宣告:本文件的縮排為四格而且以空白展開 TAB,希望修改文件的人都能遵循這個慣例。

但是有一個例外:Makefile。Makefile 的 TAB 字元是有意義的,不可用空白取代,所以 modeline 應該設為:
vim: set noet ts=8 sw=8:
另外,我也建議 ~/.vimrc 要有如下的設定:
set smarttab
set autoindent
這樣寫程式會比較方便。

2 則留言:

YJ 提到...

請問 .vimrc 可以設定為同時支援一般寫作(tab=4)以及Makefile(tab不以空格取代)兩者嗎?
還是說如果要編輯Makefile, 就必須重新設定.vimrc 然後重新啟動Vim呢

YJ 提到...

參考您的另一篇文章http://softsmith.blogspot.com/2008/12/vim-modeline.html
有提到可以在程式檔案本身最上方做設定,很實用,感謝。