emacs和vim都可以通過在檔案中設定一些變數來影響當前文檔,在emacs中被稱為Local Variables或者叫File Variables,在vim中被叫做Modeline。叫法不一樣,功能是相同的,不過寫法上還有些區別。
1 emacs
emacs的方式是在第一行用下面的格式:
-*- var1: value1; var2: value2; ... -*-也就是說變數以及它的值被包含在兩個"-*-"之間;可以寫多組變數,每組之前用";"分割;每組變數和值用":"分割,變數名在冒號前,變數的值寫在冒號後。在這段代碼的前面可以加任意的字元,也就是說我們可以在前後加上對應的注釋,讓它不對實際的文本造成影響。
比如我們要讓某個檔案開啟時自動進入C++-mode,並且設定tab-width為4就可以在檔案頭寫上:
// -*- mode: c++; tab-width: 4; -*-如果是進入python模式並且把coding設為gbk,那就是:
# -*- mode: python; coding: gbk; -*-
在某些第一行有特殊用處的語言下,emacs也可以把Local Variables放在檔案的最後。方法是在檔案的最後幾行,用包含"Local Variables:"的行開頭,"End:"的行結尾,中間每行放一個變數。
比如一個檔案是c模式並且要求tab-width為8,則在檔案尾寫:
/* Local Variables: */<br />/* mode: c */<br />/* table-width: 8 */<br />/* End: */<br />
2 vim
vim的Modeline寫法有兩種:
(1)第一種格式:
[text]{white}{vi:|vim:|ex:}[white]{options}
- [text] 隨便什麼文本,或者空白。
- {white} 至少一個空格或tab。
- {vi:|vim:|ex:} 後面三個字串之一,"vi:", "vim:" 或 "ex:"。
- [white] 可有也可無的空格。
- {options} 被set的選項列表,用冒號':'分隔。
比如:
// vim:ft=cpp:tabstop=8(2)第二種格式:
[text]{white}{vi:|vim:|ex:}[white]set {options}:[text]
- [text] 隨便什麼本文,或者空白。
- {white} 至少一個空格或tab。
- {vi:|vim:|ex:} 後面三個字串之一,"vi:", "vim:" or "ex:"。
- [white] 可有也可無的空格。
- set 字串"set " (注意set後面的那個空格不可少)。
- {options} 選項列表,用空格分開。
- : 一個冒號。
- [text] 隨便什麼文本,或者空白。
比如:
/* vim:set ft=c tabstop=2: */兩種格式的區別:
對於第一種格式,一旦識別,該行剩餘部分都將被使用,因此,這樣的寫法
/* vim:ft=c:tabstop=8 */將因為後面的*/而出錯。
而採用第二種格式就沒有這個問題了,因為它將顯式地以一個冒號結束。
/* vim:set ft=c tabstop=2: */vim中要使modeline生效,必須開啟modeline選項,方法是執行set modeline或者加入vimrc中。
另外還可以設定vim讀取前幾行當作modeline,方法是set modelines=8設定為8行,預設是5行。