2011-03-27 wcdj
先看一段簡單的tutorial。
Fix Indentation and Tabs in VIM
Thanks to the folks in #vim on freenode, here's a quick tutorial on how to fix the indentation and tabs
in an xml file from within VIM…
First find out what your current settings are by typing:
:filetype
Should return something like “filetype detection:ON plugin:OFF indent:OFF”
1) :set filetype=xml
2) :filetype indent on
3) :e
4) gg=G
Basically what this is doing is setting the filetype to xml (so it can pickup the XML indenting rules (see :e $VIMRUNTIME/indent
for a list of available languages
)
Then turn on indent, then reload it (:e).
The last step is ‘gg=G
' which will acutally retab the entire file
(gg is line 1, and G is last line
).
You can find more info by reading vim help files:
:he gg
:he =
:he G
:he :filetype
Note: Most commands in vim are run with by typing “:command
, you can find help by typing “:help command
” or simply “:he cmd
”. HOWEVER, the main command to retab “gg=G” is NOT preceeded by a “:”
.
看完這段tutorial,我們遇到的問題基本就解決了。
Vim格式化代碼功能——gg=G
常用的幾個功能:
(1) gg=G 是一個自動縮排的命令 (在命令狀態下直接輸入,不需要輸入冒號),gg是檔案首,G是檔案尾,所以 gg=G 是整理全部代碼。
(2) == 整理當行,加行數整理多行。
(3) ={ 或者 =i{ 整理一個代碼塊。
(4) mG=nG 當 m 不等於 n 的時候能完成從 m 行到 n 行的局部的縮排。例如,從80行縮排直到100行,你可以用 80G=100G,在命令狀態下使用 :set nu 查看行號,一般更習慣將 se nu 直接寫入Vim的設定檔,這樣每次開啟都會顯示行號。
(5) 在寫代碼前,設定自己的代碼風格。在設定檔裡添加命令:
" 設定縮排和行號
set nu ru ai si ts=4 sw=4
(6) :set equalprg=indent
意思是用indent程式處理等號命令,indent預設是gnu風格。
建議不要改,代碼風格應該自己主動養成,=適用於修改代碼或者粘貼別處代碼後整理縮排。
這裡又體現出不用indent的好處了,如果用indent,單純格式化代碼塊會丟統一的行首縮排,而且選中的如果不是內部完整的代碼塊,會出錯,把出錯的輸出貼到了代碼裡....弊端很多。
參考:
http://forum.ubuntu.org.cn/viewtopic.php?f=35&t=296929&p=2145053
http://blog.zol.com.cn/808/article_807892.html
http://www.chovy.com/web-development/fix-indentation-and-tabs-in-vim/#comments