目前,在咱們講述 Vim 的教程中,討論過編輯器的模式行Modeline功能以及怎樣用插件來擴展 Vim 的功能集。可正如咱們所知,Vim 提供了很是多的內置功能:所以在本教程中更進一步,咱們來談談在該編輯器啓動時的可用模式。 |
但在咱們開始以前,請注意在本教程中說起的全部例子、命令及用法說明都是在 Ubuntu 14.04 上測試的,咱們測試用的 Vim 版本是 7.4 。vim
Vim 中的兼容模式與不兼容模式app
爲了更好理解上述的 Vim 模式,你有必要先去了解下此編輯器初始化過程的一個重要方面。編輯器
系統級及本地 vimrc 文件測試
當 Vim 啓動時,編輯器會去搜索一個系統級的 vimrc 文件來進行系統範圍內的默認初始化工做。插件
這個文件一般在你係統裏 $VIM/vimrc 的路徑下,若是沒在那裏,那你能夠經過在 Vim 裏面運行 :version命令來找到它的正確存放位置。好比說,在我這裏,這個命令的相關部分的輸出結果以下:命令行
... ... ... system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" 2nd user vimrc file: "~/.vim/vimrc" user exrc file: "$HOME/.exrc" fall-back for $VIM: "/usr/share/vim" ... ... ...
能夠看到那個系統 vimrc 文件確實位於 $VIM/vimrc ,但我檢查了我機子上沒設置過$VIM 環境變量。因此在這個例子裏 - 正如你在上面的輸出所看到的 - $VIM 在我這的路徑是 /usr/share/vim,是一個回落值(LCTT 譯註:即若是前面失敗的話,最終採用的結果)。因而我試着在這個路徑尋找 vimrc ,我看到這個文件是存在的。如上便是個人系統 vimrc 文件,就如前面提過的那樣 - 它在 Vim 啓動時會被讀取。教程
在這個系統級 vimrc 文件被讀取解析完後,編輯器會查找一個用戶特定的(或者說本地的)vimrc 文件。這個本地 vimrc 的搜索順序是:環境變量 VIMINIT、$HOME/.vimrc、環境變量 EXINIT, 和一個叫 exrc的文件。一般狀況下,會存在 $HOME/.vimrc或 ~/.vimrc這樣的文件,這個文件可看做是本地 vimrc。io
咱們談論的是什麼兼容性table
就像咱們談論 Vim 的兼容性模式和不兼容性模式那樣,這些模式的開啓和禁用會作出什麼樣的兼容性也值得了解。要了解這些,先要知道 Vim 是 VIMproved 的縮寫,像這個全名暗示的那樣,Vim 編輯器是 Vi 編輯器的改進版。變量
通過改進意味着 Vim 的功能集比 Vi 的更大。
當談論 Vim 的兼容和不兼容模式時,咱們所說的兼容性是指 Vim 兼容 Vi。在兼容模式下運行時,Vim 大部分加強及改善的功能就不可用了。無論怎樣,要記住這種模式下,Vim 並不能簡單等同 Vi - 此模式只是設定一些相似 Vi 編輯器工做方式的默認選項。
不兼容模式 - 不用多說 - 使得 Vim 用起來跟 Vi 不兼容,也使得用戶能夠用到它的全部加強、改善及特徵。
怎麼啓用/禁用這些模式?
在 Vim 中嘗試運行 :help compatible 命令,接着你會看到以下語法:
'compatible' 'cp' boolean (默認開啓 ,當 |vimrc| 或 |gvimrc| 存在時關閉)
描述中說到兼容模式默認開啓的,不過當 vimrc 文件存在時會關閉。但說的是哪一種 vimrc 文件呢?答案是本地 vimrc。深刻研究下 :help compatible 命令給出的詳情,你會發現下面內容說得更清楚:
事實上,這意味着當一個 |vimrc| 或 |gvimrc| 文件存在時,Vim 會用默認的 Vim,不然它會用 Vi 默認的。(注:若是系統級的 vimrc 或 gvimrc 文件中帶有 |-u| 參數,則不會這樣。)。
那麼在 Vim 啓動時,實際上進行的動做是,首先會解析系統 vimrc 文件 - 在這時處於兼容性模式默認開啓狀態。如今,不管什麼時候發現一個用戶(或成爲本地) vimrc ,不兼容模式都會打開。:help compatible-default命令說的很清楚:
在 Vim 啓動時,‘compatible’選項是打開的。這將在 Vim 開始初始化時應用。可是一旦以後發現用戶級 vimrc 文件,或在當前目錄有一個 vimrc 文件,抑或是 VIMINIT環境變量已設置,Vim 就會被設爲不兼容模式。
假如你想無視默認的行爲,要在編輯器開始解析系統 vimrc 文件時打開不兼容模式,你能夠經過添加以下命令到那個文件的開頭來完成這個操做。
:set nocompatible
其餘有用細節
這兒是一些關於這些模式的更有用的細節:
如今經過建立一個 .vimrc 文件來設置或重置兼容性會有一個反作用:(鍵盤)映射(Mapping)在解釋的時候會有衝突。這使得在用諸如回車控制符 <CR>等狀況時會有影響。若是映射關係依賴於兼容性的某個特定值,在給出映射前設置或者重置它。
上述行爲可以用如下方式能覆蓋:
結論
咱們都以爲,你可能不會發現你本身有機會處於一種你須要打開 Vim 的 Vi 兼容模式的情形中,可是那並不意味着你應該不知道 Vim 編輯器的初始化過程。畢竟,你毫不會知道這些知識何時會幫到你。