我還清晰地記得我第一次接觸 Vim 的時候。那時我還是一名大學生,計算機學院的機房裡都裝著 Ubuntu 系統。儘管我在上大學前也曾接觸過不同的 Linux 發行版(比如 RHEL —— Red Hat 在百思買出售它的 CD),但這卻是我第一次要在日常中頻繁使用 Linux 系統,因為我的課程要求我這樣做。當我開始使用 Linux 時,正如我的前輩和將來的後繼者們一樣,我感覺自己像是一名“真正的程式員”了。
真正的程式員,來自 xkcd[1]
學生們可以使用像 Kate[2] 一樣的圖形文字編輯器,這也安裝在學校的電腦上了。對於那些可以使用 shell 但不習慣使用控制檯編輯器的學生,最流行的選擇是 Nano[3],它提供了很好的互動式選單和類似於 Windows 圖形文字編輯器的體驗。
我有時會用 Nano,但當我聽說 Vi/Vim[4] 和 Emacs[5] 能做一些很棒的事情時我決定試一試它們(主要是因為它們看起來很酷,而且我也很好奇它們有什麼特別之處)。第一次使用 Vim 時嚇到我了 —— 我不想搞砸任何事情!但是,一旦我掌握了它的訣竅,事情就變得容易得多,我就可以欣賞這個編輯器的強大功能了。至於 Emacs,呃,我有點放棄了,但我很高興我堅持和 Vim 在一起。
在本文中,我將介紹一下 Vim(基於我的個人經驗),這樣你就可以在 Linux 系統上用它來作為編輯器使用了。這篇文章不會讓你變成 Vim 的專家,甚至不會觸及 Vim 許多強大功能的皮毛。但是起點總是很重要的,我想讓開始的經歷盡可能簡單,剩下的則由你自己去探索。
第 0 步:開啟一個控制檯視窗
在使用 Vim 前,你需要做一些準備工作。在 Linux 作業系統開啟控制檯終端。(因為 Vim 也可以在 MacOS 上使用,Mac 使用者也可以使用這些說明)。
開啟終端視窗後,輸入 ls
命令列出當前目錄下的內容。然後,輸入 mkdir Tutorial
命令建立一個名為 Tutorial
的新目錄。透過輸入 cd Tutorial
來進入該目錄。
Create a folder
這就是全部的準備工作。現在是時候轉到有趣的部分了——開始使用 Vim。
第 1 步:建立一個 Vim 檔案和不儲存退出
還記得我一開始說過我不敢使用 Vim 嗎?我當時在害怕“如果我改變了一個現有的檔案,把事情搞砸了怎麼辦?”畢竟,一些電腦科學作業要求我修改現有的檔案。我想知道:如何在不儲存更改的情況下開啟和關閉檔案?
好訊息是你可以使用相同的命令在 Vim 中建立或開啟檔案:vim
,其中 表示要建立或修改的標的檔案名。讓我們透過輸入
vim HelloWorld.java
來建立一個名為 HelloWorld.java
的檔案。
你好,Vim!現在,講一下 Vim 中一個非常重要的概念,可能也是最需要記住的:Vim 有多種樣式,下麵是 Vim 基礎中需要知道的的三種:
樣式 | 描述 |
---|---|
正常樣式 | 預設樣式,用於導航和簡單編輯 |
插入樣式 | 用於直接插入和修改文字 |
命令列樣式 | 用於執行如儲存,退出等命令 |
Vim 也有其他樣式,例如可視樣式、選擇樣式和命令樣式。不過上面的三種樣式對我們來說已經足夠用了。
你現在正處於正常樣式,如果有文字,你可以用箭頭鍵移動或使用其他導航鍵(將在稍後看到)。要確定你正處於正常樣式,只需按下 esc
(Escape)鍵即可。
提示:
Esc
切換到正常樣式。即使你已經在正常樣式下,點選Esc
只是為了練習。
現在,有趣的事情發生了。輸入 :
(冒號鍵)並接著 q!
(完整命令::q!
)。你的螢幕將顯示如下:
Editing Vim
在正常樣式下輸入冒號會將 Vim 切換到命令列樣式,執行 :q!
命令將退出 Vim 編輯器而不進行儲存。換句話說,你放棄了所有的更改。你也可以使用 ZQ
命令;選擇你認為更方便的選項。
一旦你按下 Enter
(回車),你就不再在 Vim 中。重覆練習幾次來掌握這條命令。熟悉了這部分內容之後,請轉到下一節,瞭解如何對檔案進行更改。
第 2 步:在 Vim 中修改並儲存
透過輸入 vim HelloWorld.java
和回車鍵來再次開啟這個檔案。你可以在插入樣式中修改檔案。首先,透過 Esc
鍵來確定你正處於正常樣式。接著輸入 i
來進入插入樣式(沒錯,就是字母 i)。
在左下角,你將看到 -- INSERT --
,這標志著你這處於插入樣式。
Vim insert mode
寫一些 Java 程式碼。你可以寫任何你想寫的,不過這也有一份你可以參照的例子。你的螢幕將顯示如下:
-
public class HelloWorld {
-
public static void main([String][11][] args) {
-
}
-
}
非常漂亮!註意文字是如何在 Java 語法中高亮顯示的。因為這是個 Java 檔案,所以 Vim 將自動檢測語法並高亮顏色。
儲存檔案:按下 Esc
來退出插入樣式併進入命令列樣式。輸入 :
並接著 x!
(完整命令::x!
),按回車鍵來儲存檔案。你也可以輸入 wq
來執行相同的操作。
現在,你知道瞭如何使用插入樣式輸入文字並使用以下命令儲存檔案::x!
或者 :wq
。
第 3 步:Vim 中的基本導航
雖然你總是可以使用上箭頭、下箭頭、左箭頭和右箭頭在檔案中移動,但在一個幾乎有數不清行數的大檔案中,這將是非常困難的。能夠在一行中跳躍游標將會是很有用的。雖然 Vim 提供了不少很棒的導航功能,不過在一開始,我想向你展示如何在 Vim 中到達某一特定的行。
單擊 Esc
來確定你處於正常樣式,接著輸入 :set number
並鍵入回車。
瞧!你現在可以在每一行的左側看到行號。
Showing Line Numbers
好,你也許會說,“這確實很酷,不過我該怎麼跳到某一行呢?”再一次的,確認你正處於正常樣式。接著輸入 :
,在這裡 是你想去的那一行的行數。按下回車鍵來試著移動到第二行。
-
:2
現在,跳到第三行。
Jump to line 3
但是,假如你正在處理一個一千多行的檔案,而你正想到檔案底部。這該怎麼辦呢?確認你正處於正常樣式,接著輸入 :$
並按下回車。
你將來到最後一行!
現在,你知道如何在行間跳躍了,作為補充,我們來學一下如何移動到一行的行尾。確認你正處於有文字內容的一行,如第三行,接著輸入 $
。
Go to the last character
你現在來到這行的最後一個位元組了。在此示例中,高亮左大括號以顯示游標移動到的位置,右大括號被高亮是因為它是高亮的左大括號的匹配字元。
這就是 Vim 中的基本導航功能。等等,別急著退出檔案。讓我們轉到 Vim 中的基本編輯。不過,你可以暫時順便喝杯咖啡或茶休息一下。
第 4 步:Vim 中的基本編輯
現在,你已經知道如何透過跳到想要的一行來在檔案中導航,你可以使用這個技能在 Vim 中進行一些基本編輯。切換到插入樣式。(還記得怎麼做嗎?是不是輸入 i
?)當然,你可以使用鍵盤逐一刪除或插入字元來進行編輯,但是 Vim 提供了更快捷的方法來編輯檔案。
來到第三行,這裡的程式碼是 public static void main(String[] args) {
。雙擊 d
鍵,沒錯,就是 dd
。如果你成功做到了,你將會看到,第三行消失了,剩下的所有行都向上移動了一行。(例如,第四行變成了第三行)。
Deleting A Line
這就是刪除命令。不要擔心,鍵入 u
,你會發現這一行又回來了。喔,這就是撤銷命令。
Undoing a change in Vim
下一課是學習如何複製和貼上文字,但首先,你需要學習如何在 Vim 中突出顯示文字。按下 v
並向左右移動游標來選擇或反選文字。當你向其他人展示程式碼並希望標識你想讓他們註意到的程式碼時,這個功能也非常有用。
Highlighting text in Vim
來到第四行,這裡的程式碼是 System.out.println("Hello, Opensource");
。高亮這一行的所有內容。好了嗎?當第四行的內容處於高亮時,按下 y
。這就叫做複製樣式,文字將會被覆制到剪貼簿上。接下來,輸入 o
來建立新的一行。註意,這將讓你進入插入樣式。透過按 Esc
退出插入樣式,然後按下 p
,代表貼上。這將把複製的文字從第三行貼上到第四行。
Pasting in Vim
作為練習,請重覆這些步驟,但也要修改新建立的行中的文字。此外,請確保這些行對齊工整。
提示: 您需要在插入樣式和命令列樣式之間來回切換才能完成此任務。
當你完成了,透過 x!
命令儲存檔案。以上就是 Vim 基本編輯的全部內容。
第 5 步:Vim 中的基本搜尋
假設你的團隊領導希望你更改專案中的文字字串。你該如何快速完成任務?你可能希望使用某個關鍵字來搜尋該行。
Vim 的搜尋功能非常有用。透過 Esc
鍵來進入命令樣式,然後輸入冒號 :
,我們可以透過輸入 /
來搜尋關鍵詞, 指你希望搜尋的字串。在這裡,我們搜尋關鍵字串
Hello
。在下麵的圖示中沒有顯示冒號,但這是必須輸入的。
Searching in Vim
但是,一個關鍵字可以出現不止一次,而這可能不是你想要的那一個。那麼,如何找到下一個匹配項呢?只需按 n
鍵即可,這代表下一個。執行此操作時,請確保你沒有處於插入樣式!
附加步驟:Vim 中的分割樣式
以上幾乎涵蓋了所有的 Vim 基礎知識。但是,作為一個額外獎勵,我想給你展示 Vim 一個很酷的特性,叫做分割樣式。
退出 HelloWorld.java
並建立一個新檔案。在控制檯視窗中,輸入 vim GoodBye.java
並按回車鍵來建立一個名為 GoodBye.java
的新檔案。
輸入任何你想輸入的讓內容,我選擇輸入 Goodbye
。儲存檔案(記住你可以在命令樣式中使用 :x!
或者 :wq
)。
在命令樣式中,輸入 :split HelloWorld.java
,來看看發生了什麼。
Split mode in Vim
Wow!快看!split
命令將控制檯視窗水平分割成了兩個部分,上面是 HelloWorld.java
,下麵是 GoodBye.java
。該怎麼能在視窗之間切換呢?按住 Control
鍵(在 Mac 上)或 Ctrl
鍵(在 PC 上),然後按下 ww
(即雙擊 w
鍵)。
作為最後一個練習,嘗試透過複製和貼上 HelloWorld.java
來編輯 GoodBye.java
以匹配下麵螢幕上的內容。
Modify GoodBye.java file in Split Mode
儲存兩份檔案,成功!
提示 1: 如果你想將兩個檔案視窗垂直分割,使用
:vsplit
命令。(代替:split
命令,指你想要使用分割樣式開啟的檔案名)。
提示 2: 你可以透過呼叫任意數量的
split
或者vsplit
命令來開啟兩個以上的檔案。試一試,看看它效果如何。
Vim 速查表
在本文中,您學會瞭如何使用 Vim 來完成工作或專案,但這隻是你開啟 Vim 強大功能之旅的開始,可以檢視其他很棒的教程和技巧。
為了讓一切變得簡單些,我已經將你學到的一切總結到了 一份方便的速查表[6] 中。
朋友會在“發現-看一看”看到你“在看”的內容