模式行::Vim進階索引[1]

helloxchen發表於2010-10-22




Vim進階索引[1]::模式行

這是Vim進階索引的第一篇,本文假設使用者已經掌握了Vim的基本用法(正因為這個假設所以你裡的一些內容你可能已經掌握了)。作為第一篇我們要講的是modeline

相關幫助:

:help modeline
:help 'modeline'
:help 'modelines'




1 什麼是模式行?

模式行(modeline)大家應該已經見過了。在Vim文件底部通常會有這麼一行`vim:tw=78:ts=8:ft=help:norl:‘,這一行就叫模式行。模式行用來在文件中儲存設定,Vim在讀入文件後根據模式行的指示對文件對行設定。這樣透過在文件中寫入模式行我們可以對文件進行個性化設定,定製文字的編輯環境。此外,模式行作為文件的附加資訊有助於我們和別人瞭解一個文件——推薦的文字寬度、使用的語法格式、縮排的方式等等。我們先看一下模式行的用法,再討論我們可以做什麼樣的設定。

2 模式行的格式

幾乎所有用set命令可以使用的設定項都可以在模式行中使用(有少數設定項是不能在模式行中使用的,如formatprg)。但在進行設定之前必須在設定項前加上`vim:‘(也可以是`vi:‘或`ex:‘,注意一定要小寫。),這是Vim判別一模式行的關鍵。比如有一個檔案我們希望每次開啟後自動設定為只讀,可以在檔案中加入模式行`vim:readonly‘。如果有多個設定項的話每個項之間用冒號或空格隔開。現在我們再看一下剛看到的Vim底部的模式行:`vim:tw=78:ts=8:ft=help:norl:‘,現在我們知道在我們開啟Vim幫助後它自動進行了如下設定:設定文字寬度為78;設定製表符寬度為8;檔案型別為幫助檔案;閱讀順序為左到右。




3 模式行中的附加文字

如果我們在自己的日記中或者寫作的過程中我們當然可以隨意的在檔案前幾行或後幾行新增模式行。但是在一些情況下我們不能直接地在檔案開頭或最後一行新增模式行——比如程式的原始碼,模式行最好是以註釋的形式出現。要讓模式行以註釋的形式出現,只要在前面加入表示註釋的命令或符號就行了。例如要在C++原始檔末尾加入模式行:

// vim:ft=cpp:

很簡單對吧,事實上模式行的`vim:‘之前允許有任意的文字串。唯一的要求是文字串與`vim:‘之間必須至少有一個空格。所以,像這樣的模式行是允許的:

*****今天是X月X日星期X***** @#$%$^%^&*()   |   vim:encoding=utf8  tw=80

不過下面的模式行則會出錯:
/* vim:ro */
原因是後面的`*/‘被當成一個設定項了,而事實上這個設定項不存在。為了能在模式行後面新增文字串(或者說為了使用c風格的註釋),我們要用到模式行的另一種形式。




4 模式行的另一種形式

實際上模式行有兩種形式,第一種就是前面說的設定項之間用冒號或空格分隔,缺點是不能後設定項後面新增其他文字。第二種要求使用set命令。不能使用多條set命令。但一條命令可以設定多個選項。選項之間用空格分隔。舉例而言,像前面提到的Vim文件的模式行以第二種形式寫出來就是:

vim:set tw=78 ts=8 ft=help norl:

這種形式的好處就是或以是模式行末隨意新增文字。下面的模式行都是允許的:

/* vim:set ro */
<!-- vim:set ft=html: 模式行示例--&gt

需要注意的是第一種形式中最後一設定項後的冒號或空格是可有可無的。而第二種形式中最後一設定項後一定要有冒號——不管冒號後有沒有文字。在設定項中如果要使用空格、製表符或冒號可以在前面加上轉義符-`‘。其他需要轉義符的情況見`:help option-backslash‘。




5 模式行應用

由於幾乎所有的Vim設定項都可以在模式行中使用所以模式行的使用完全視個人的需要而定。因為自己常用的設定可以放在.vimrc檔案中所以實際使用中放在模式行中的設定通常是針對某一文件的專有設定。需要在不同的電腦上編輯/檢視同一份文件時為了使用同樣的設定也會使用模式行(如Vim的文件)。

vim: tabstop=4
正確顯示製表符,使文件在不同的機子上有一樣的製表符寬度
vim: tw=48 fo=tqamn ts=4 expandtab
寫文章。使用48個半形字元文字寬度(24個漢字);序號縮排及漢字支援的格式選項;用4個空格代替製表符;
vim: enc=latin1 guifont=terminal:oem:h10:w8
檢視ANSI編碼的圖形字元(Windows環境)時所用的設定。用來寫/看nfo檔案。
vim: nowrap tw=0 wm=0 backup
我在行對行翻譯時經常使用的設定
vim: fdm=marker
設定摺疊規則。關於摺疊(folding)我們在以後會講到。
vim: ft=xxx
設定filetype。關於filetype在以後會講到。




6 下一篇

模式行的使用方式是比較容易掌握的,但它的價值也比較容易被忽視。希望透過這一篇教程能讓大家對模式行有所瞭解。下一篇我們要講的是摺疊(:help Folding),下次見。





Previous: Top

Appendix A 為什麼我新增了模式行卻沒作用?

  • 首先檢查一下`vim:‘與前面的文字之間有沒有一個(半形)空格。
  • 其次模式行要求在檔案開頭的前N行或後N行中,如果沒在這個範圍內模式行就不起作用。modelines用來設定N的具體數目。比如`:set modelines=8‘這個命令將模式行的有效範圍設在了前8行和後8行。
  • 最後看有沒有設定`'modeline'‘選項。modeline選項在Vim中預設是開的但也有可能因為一些原因被關上了,比如設定了nomodeline或是沒有設定nocompatible

[ -結束- ]

轉自http://blah.blogsome.com/2006/04/05/vim_tut_modeline/

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24790158/viewspace-1040217/,如需轉載,請註明出處,否則將追究法律責任。

相關文章