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