VIM 的 modeline 和 autocmd
modeline
vim的modeline可以讓你針對每個文件進行文件級別的設置,這些設置是覆蓋當前用戶的vimrc中的設置的。當vim打開一個包含了vim modeline註釋行的文件時,會自動讀取這一行的參數配置並調整自己的設置到這個配置。vim默認關閉modeline,開啟的話需要在你的home下的.vimrc文件中增加一行:
set modeline
在文件的首行/尾行(必須),寫一行當前這個文件裏面語言所支持的註釋,例如寫shell就是#,寫Python就是#,寫php就//或/**/,然後在裏面加上modeline識別的固定格式,舉例:
# vim: set expandtab ts=4 sts=4 sw=4 :
上面的註釋中,‘#‘後面、"vim:"前面的空格是必須的,結尾的‘:‘也是必須的,這些是modeline所識別的。中間就是熟悉的vimrc中的設置了。在不同的語言中,註釋的語法也不一樣,所有在其他語言中可能有不同寫法。
在文家裏面,可以用該文件標準的註解形式向 vim 下指令。譬如一個 reStructuredText 格式的文字檔,你可以加上以下的 modeline,讓 vim 在讀它的時候自動把檔案解釋為 rst (以取得正確的語法高亮):
.. vim: set ft=rst:
modeline 裏可以放的指令不限一個,所以我.py 檔案在檔尾都有這麼一行的 modeline
# vim: set ai et nu sw=4 ts=4 tw=79:
autocmd
只有自己會看的檔案這麼作當然沒什麼問題,但如果有別人會看的話,這位別人用的又也是 vim,我們設的 modeline 或許會有點擾人。不過,vim 這麼強大的軟體,難道不能設定為根據檔案型態決定統一的設定嗎?當然可以,vim 可以針對指定的條件,在軟體發生指定事件的時候執行指令。這個功能叫作 autocmd。假設我希望在開啟每一個 .py 檔的時候都執行上面 modeline 的那些指令,可以設定一個以下的 autocmd (寫在你的 .vimrc 或 Windows 下的 vimrc 裏)
au BufRead *.py set ai et nu sw=4 ts=4 tw=79
如果我們寫的程式要給別人看,希望留給別人的 vim 一點設定的空間,可以使用 autocmd 取代 modeline
VIM 的 modeline 和 autocmd