1. 程式人生 > >VIM 的 modeline 和 autocmd

VIM 的 modeline 和 autocmd

一個 其他 truct 格式 問題 讀取 用戶 事件 fread

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