學習vi和vim編輯器(13):vi同類品的功能總覽,vivim
本章將學習vi同類品提供的相關功能。
它們都是我兄弟:
有許多可以自由取得的vi編輯器同類品。《vi和vim編輯器》重點介紹了vim編輯器,也簡要地介紹了另外三種常用的同類品:nvi,elvis,vile。這些同類品都提供了vi之外的許多擴充功能,儘管方式可能不同,但這些同類品通常會提供相同的擴充功能。本篇文章將總體介紹這些同類品提供的擴充功能。
多視窗編輯:可以將螢幕分割成多個“視窗”,從而在每個視窗編輯不同的檔案,或者觀察同一檔案的不同部分。這使得同時在多個檔案中工作更加容易,在檔案間剪貼文本也更加方便。
圖形化使用者介面:除了nvi之外,所有同類品都可以編譯成支援X Window介面。
擴充的Regex:之前已經學習過了vi編輯器中可用於搜尋和替換模式的Regex元字元。每種同類品都提供了某種形式的擴充Regex,但每一種擴充方式的“風味”都與眾不同。
增強標籤:"Exuberant ctags"程式是ctags的同類品。比UNIX上的ctags功能更強大。可以產生擴充的tags檔案格式,讓標籤的搜尋與匹配處理更加靈活,更加強大。以下是"Exuberant ctags"的特色功能:
- 支援C與C++代碼,另外還支援29種程式設計語言,包括C#和java;
- 能夠產生所有類型的C與C++語言標籤;
- 在解析代碼時非常可靠;
- 列出供人閱讀用的源檔案中的被選擇對象的列表;
- 支援產生GNU Emacs樣式的標籤檔案;
傳統的tags檔案有三個以定位字元分隔的欄位:標籤名稱(一般是標識符),包含標籤的源檔案,以及何處可找到標識符的指示符。指示符可以是簡單的行號,或者是以斜線或問號括起的nomagic搜尋模式。新的格式向下相容傳統格式。前面三個欄位仍然相同:標籤,檔案名稱與搜尋模式。Exuberant ctags只會產生搜尋模式,而不是任意的命令。擴充的屬性會放在用於分隔的 " ;" "分隔字元後面。屬性間以tab字元分隔,每個屬性均由以冒號分隔的兩個子欄位組成,第一個子欄位是描述屬性的關鍵字,預設為kind(此時可以省略),第二個則是實際的值。擴充的ctags關鍵字可以參考《vi和vim編輯器》p144。如所示,為擴充tags檔案的一個樣本:
位於該tags檔案前面的以" !_TAG_ "開頭的初始化標籤,對於辨別建立檔案的程式很有協助。而且編輯器也可能會用這些特殊標籤來實現特殊的功能。之後便是相應的標籤定義。
標籤棧:每一種vi同類品都擴充了維護標籤棧的功能。每次通過" :tag "命令或者vi中的" ^] "命令搜尋某個標籤時,編輯器會先儲存當前的位置。這樣以後就可以使用vi編輯器的"CTRL + T"命令或者ex命令回到儲存起來的位置。vim的標籤棧功能將在後續文章進一步學習。
改進的編輯工具:所有的同類品都提供了編輯ex命令列,不限次數的撤銷,任意長度的行與八位元據,增量搜尋,將螢幕從左往右滾動以代替繞排過長的行,可視模式,以及模式指標等其它特性。
編程輔助:
vi是為編程者開發的編輯器,它提供了一些功能,使得傳統的UNIX編程者(編寫C程式和troff文檔的人)工作起來更容易。vi的同類品在此基礎上,提供了更多功能:
編輯-編譯的加速:在編譯期間,完全不需要離開編輯器,而且可以取得編譯器的輸出,並自動跳到包含錯誤的行上。
文法高亮:將代碼中的不同文法元素用不同的顏色與字型來顯示。
本章vi命令總結:
本章主要介紹了部分vi同類品(vim,nvi,elvis,vile)提供的擴充功能。後續文章將重點學習vim編輯器的各種擴充功能細節。