將 Vim 中程式碼排版的 Tab 字元轉為等寬的空白字元

這裡記錄如何在 Vim 編輯器中,設定讓 tab 鍵自動轉換為空白字元。

程式碼的排版對於程式的可閱讀性是相當重要的,如果需要將程式碼貼在自己慣用的編輯器以外的地方,就有可能會因為不同編輯器的 tab 寬度不同,而破壞了原來排版好的程式碼。


因為比較大型的程式時常會有很多層的迴圈或是判斷式,如果 tab 的寬度使用預設的 4 個字元寬的話,時常就會讓整個程式碼因為縮排太多變得很難閱讀(應該程式設計師都會有這樣的經驗),所以我都是習慣將 tab 的寬度設定為 2 個字元寬,在 Vim 中就是設定 tabstop 這個變數:

:set tabstop=2

這樣 tab 鍵就不會太寬:

vim-1

但是因為一般的編輯器預設的 tab 寬度都是 4 個字元寬,所以如果換一個編輯器來開啟同這個檔案的話,就很容易出現這樣的狀況:

sublime-1

因為 tab 字元的顯示寬度不同,就造成排版的錯亂。

若要避免這樣的狀況,可以將 tab 直接轉換為等寬的空白,這樣不管貼到哪一個編輯器,都可以維持原有的排版。首先設定 expandtab

:set expandtab

expandtab 設定之後,後續輸入的 tab 字元就會自動轉為等效的空白字元,但是既有的 tab 字元還是維持不變,若要將既有的 tab 字元一併轉換,則需要執行:

:retab

另外還要再設定一下排版用的 shiftwidth

:set shiftwidth=2

shiftwidth 是設定縮排的寬度,通常都是設定成跟 tabstop 相同的值。

您可以直接在 .vimrc 設定檔中加上一行設定,包含以上這些參數:

:set tabstop=2 shiftwidth=2 expandtab

這樣以後在編輯程式碼的時候,就不需要煩惱排版與空白問題了。

程式碼的 tab 經過轉換為空白之後,在使用別的編輯器開啟時,也可以維持原來的排版:

sublime-2

參考資料:wikia

Linux

1 Comment

  1. 刚刚入门Vim,自己总结了一些Vim常用命令http://einverne.github.io/2015/05/08/vim-tips.html

Leave a Reply