我最愛用的文書編輯器非「Vi/Vim」莫屬。Vi/Vim 是一套歷史悠久的程式與文書編輯器程式,內建在 Apple 的 OS X 與 Linux 作業系統中,並且支援 Microsoft Windows 系統,曾被稱為電腦史上最強大的編輯器軟體。不過我就只是喜歡他那簡約的設計風格以及像是無所不包的延伸功能,適合作家寫作與有怪僻的程式設計師使用。
延伸閱讀:《VI/VIM 文書編輯軟體的傳奇歷史》
由於 VI / VIM 幾乎等於近代電腦的發展史,不意外的也有高手協助中文化,這也是讓華人容易上手的原因之一(而且比起小作家好用千萬倍)。例如《VimWiki:用Vim 撰寫個人 WIKI 日誌/電腦軟體教學》這篇文章就是透過 VI / VIM 的擴充程式,設計出個人專用的 Wiki 日誌。
Vi / Vim 程式碼與文書編輯器的最大特點之一,就是將一般編輯器僅有的編輯模式(Edit Mode),重新定義為基本模式(Basic Mode),並在基本模式下提供下列三種延伸應用:
- 常態模式(Normal mode),剛開啟 Vi / Vim 軟體時的初始化模式,只能透過「按鍵」進行已定義過的軟體控制,不能對編輯區域進行修改或新增文字。
- 插入模式(Insert Mode),按「Insert」按鈕後會進入插入模式(狀態列顯示「--插入--」),可以對編輯區域進行編輯(新增和修改文字)。在插入模式中按壓「Esc」按鈕,可回到常態模式。
- 命令列模式(Cmdline Mode or Command-Line Mode),在常態模式下按壓「:」按鈕,可進入命令列模式,並在視窗下方出現一個「:」符號。使用者可在 : 符號後方接著輸入各種控制指令,以達到諸多功能應用。在命令列模式下按壓「Esc」按鈕,可回到常態模式。
官方網站:《VI/VIM》
Vi / Vim 常用指令參考表
常態模式(透過「Insert」與「Esc」與插入模式交換)
- 游標移動:h, k, l, j
- 單一字元、字串的刪除:x、X、dw
- 整行刪除、複製及貼上:dd、yy、P/p
- 上下行合併:J
- 搜尋、重複搜尋:/、n/N
- 復原、重複:u、[ctrl]-r
- 儲存後離開:ZZ
- 視窗分割::sp newfile、:vs
- 跳到第一行、中間及最後一行第一個位元:H(gg)、M、G
- 跳到下一個字串第一個字元:w / W
命令列模式(使用「:」鍵進入)
- 儲存與離開:「w」、「w!」、「q」、「q!」、「wq!」。
- 設定:「:set」。
- 字串取代:「:g/x/」。
- 其他::「n1」、「n2s」、「:old」、「:new」。
存取檔案 & 離開 VI 程式
- :q:關閉VI,但不儲存,但若修改過文件內容則須使用 :q! 指令強制離開
- :w:儲存目前所編輯的文件
- :w:檔案名稱:將目前所編輯的文件另存新檔至「檔案名稱」
- :wq:儲存目前所編輯的文件,並離開 VI 程式
- :x:儲存目前所編輯的文件,並離開 VI 程式,同 :wq
插入模式
在「常態模式」按壓下列按鍵,可進入「插入模式」:
- i:在游標左方進入輸入模式。
- I:在游標所在行的行首進入輸入模式。
- a:在游標右方進入輸入模式。
- A:在游標所在行的行尾進入輸入模式。
- o(小寫英文字母 o):在游標下一行另起新行,並進入輸入模式。
- O(大寫英文字母 o):在游標上一行另起新行,並進入輸入模式。
移動游標
- k:將游標向上移動一個字元,等同方向鍵「↑」
- j:同上,等同方向鍵「↓」
- h:同上,等同方向鍵「←」
- l:同上,等同方向鍵「→」
- H:將游標移至螢幕頂端
- M:將游標移至螢幕中央
- L:將游標移至螢幕底端
- gg:將游標移至檔案第一行
- G:將游標移至檔案最後一行
- b:移動游標至單字的第一個字母,若該處已是第一個字母,則移至前一個單字的第一個字母
- e:移動游標至單字的最後一個字母,若該處已是最後一個字母,則會移至下一個單字的最後一個字母
- w:移動游標至下一個單字的第一個字母
- ^:移動游標至該行第一個非空白字母
- :數字:將游標移至檔案第 數字 行,如輸入 :45,即移動至檔案第 45 行
- :數字 G:將游標移至檔案第 數字 行,如輸入 45G,即移動至檔案第 45 行
捲動視窗
- +f:將視窗向下捲動一半。
- +b:將視窗向上捲動一半。
- +d:將視窗往下捲動一頁。
- +u:將視窗往上捲動一頁。
搜尋文字
- /字串、?字串:向下(向上)搜尋字串;同時,文件中所有相同字串的背景色會呈現高亮,在下達完搜尋指令之後,還可以透過「n」和「N」指令作進一步控制。
- n 跳到下一個「字串」所在地
- N 跳到上一個「字串」所在地
另,把游標停在想要搜尋的字串上,使用「*」按鍵可以達到向下搜尋的效果。而把游標停在字串上,使用「#」則可以向上搜尋。
複製、移動、刪除文字
- yy:將該行文字複製,指令 Y 有相同的功能
- p:將所剪下或複製的文字貼上
- 行數1, 行2 co 行3:將 行數 1 到 2 之間所有的字元複製至 行數3(行數3 必須原本就存在)
- (在輸入模式下使用):將游標左邊一個文字刪除
- dd:將該行文字刪除,此項指令可與指令 p (貼上)配合使用,而變成是「剪下」的功能
- dw;刪除該單字
- cc:將該行文字改變,當輸入此指令時,游標所在該行會被刪除,並自動進入「輸入模式」
- cw:改變該單字,當輸入此指令時,該單字在游標之後的字元會被刪除,並自動進入「輸入模式」
- D:將游標所在該行中右邊的所有文字全部刪除
- +w(在輸入模式下):將游標所在該單字中左邊的所有字元全部刪除
- 行數1, 行2 m 行3:將行數 1 到 2 之間所有的字元,移動到行數 3(行數 3 必須原本就存在)
- 行數1, 行2 d:將 行數1 到 2 之間所有的字元進行刪除
- :g/被替代的字串/s//新字串/g:用「新字串」取代「被替代的字串」
書籤功能
書籤功能有兩種,小寫的 a 至 z,用於同一份文件中的書籤標示,及大寫的 A 至 Z,用於跨檔案間的書籤功能。
- m(a-z) or m(A-Z):設定書籤
- `(a-z) or `(A-Z):跳到書籤所在位置
- :marks:顯示各書籤資訊
其他指令
- u:動作還原,若不小心下錯指令,可以利用這個指令還原。
- +r:動作重做,若不小心還原錯了,可以利用這個指令重做。
- K:函式查詢,若您在 VIM 中撰寫 C/C++ 程式,可以在 C/C++ 標準函式厙提供的函式名字上按「K」,便可以呼叫出 man page 查詢該函式的用法
- =:自動程式縮排對齊,若您在 VIM 中撰寫 C/C++ 程式,可以利用「gg」指令將游標移到視窗最上方、利用「v」切換到選取模式、再用「G」將游標移到檔案尾端 (即達到全選的功能),最後按「=」,VIM 便會幫你的程式做自動對齊
- :set all:顯示所有參數,可透過此指令查詢 VIM 支援的所有參數。
- :set nu:顯示行數
- :set nonu:隱藏行數
- :set autoindent:自動縮排功能。「:set noautoindent」縮排功能關閉
- :set tabstop=數字:設定 tab 對齊的字元數,一般 VIM 設定中,tabstop 的預設值為 8,但在 windows 下,許多文字編輯軟體的預設 tabstop 數為 4,可以需要進行設定。
- :set background=模式:設定 keyword 字體顏色模式,使用「:set background=dark」指令可以讓 VIM 中的 keyword 以較亮眼的顏色表現出來,適用於暗色系的背景。 使用「:set background=light」指令則可以較暗沉的顏色表現出來,適用於亮色系的背景。
- :split [檔案名稱]:水平分割文字編輯視窗,可指定「檔案名稱」。另,在編輯視窗中可以利用 +w 配合方向鍵跳躍選取所要編輯的視窗,若想要關閉視窗,則在欲關閉視窗裡的命令模式下,打入離開指令,如: :wq 即可關閉該視窗。
- :vsplit [檔案名稱]:垂直分割文字編輯視窗,功能同上。
在 VI / VIM 中可以自行設定慣用的控制參數,倘若不希望在每次開啟 VI / VIM 編輯器時都必須重新設定一次,可以在使用者的「Home」目錄下(若為 Windows 系統則是在 Program Files 裡頭的 VIM 資料夾下),建立一個名為 「.vimrc」的檔案來存放個人 VIM 的設定。檔案內容的格式可參考下列所示:
- set background=dark
- set autoindent
- set number
- …
結論
VI / VIM 這套文書編輯器會受人們喜歡不是沒有原因的,一般像 Microsoft Windows 內建的基礎編輯器:小作家,功能之乏善可陳先不提以外,無法讀取大型檔案是一大缺失(Windows 7 版本之後的新版小作家已修正)。而 VI / VIM 的跨系統平台的能力,不管是在 Windows、Ubuntu Linux 或任何作業系統都可使用,這也是我一直在強調的使用者經驗之通用設計是完全相同。
最重要的,Vi / Vim 是免費的(喂)。
原文發表於2010年12月25日,於 2015 年同月同日二修。
發佈留言