一些設置選項的含義

set expandtab: 編輯時將tab展開為tabstop個空格。

shiftwidth:使用自動縮進或>><<等命令時的縮進寬度。若無expandtab,當連續縮進達到tabstop距離時,會替換為一個tab字符。

tabstop文件中的tab的顯示寬度。

softtabstop編輯時按下的縮進寬度,不啓用expandtab會混合tab與space進行縮進。

一些組合

1). tab字符顯示4個space;縮進只使用4空格

set tabstop=4
set shiftwidth=4
set expandtab

2). tab字符顯示8個space;縮進只使用4空格

set softtabstop=4
set shiftwidth=4
set expandtab

個人認為,維持tabstop和縮進空格數一致(即組合1)更好。大多數源代碼文件都是space-only或者tab-only的,而使用tabstop=4可以使用:retab將源文件轉換為4-space縮進的源文件。

3). 只用tab(4-space)

set tabstop=4
set shiftwidth=4

縮進模式之間的轉換

由於只是簡單的字符串處理,不涉及源碼編譯。所以以下方法不能完美的實現縮進轉換。如果您有更好的方法,歡迎留言。

1). tab到空格
:%retab 將文件中的tab替換為tabstop個空格。可能會影響字符串中的tab(不是轉義字符'\t')

2). 空格到tab
:%retab! 與1)相反。同樣可能會影響字符串。

3). 2-space到4-space
:%s/ /&&/g 可能會影響字符串中的內容。

4). 4-space到2-space
:%s/ / /g 可能會影響字符串中的內容。

5). 格式化
gg=G 將整個文件格式化,使用cindentlisp。效果可能會比以上幾種簡單的字符串處理更好。