Vim 入門:基礎

1 贊 回覆發表於2019-04-20

為工作或者新專案學習足夠的 Vim 知識。

我還清晰地記得我第一次接觸 Vim 的時候。那時我還是一名大學生,計算機學院的機房裡都裝著 Ubuntu 系統。儘管我在上大學前也曾接觸過不同的 Linux 發行版(比如 RHEL —— Red Hat 在百思買出售它的 CD),但這卻是我第一次要在日常中頻繁使用 Linux 系統,因為我的課程要求我這樣做。當我開始使用 Linux 時,正如我的前輩和將來的後繼者們一樣,我感覺自己像是一名“真正的程式設計師”了。

Real Programmers comic

真正的程式設計師,來自 xkcd

學生們可以使用像 Kate 一樣的圖形文字編輯器,這也安裝在學校的電腦上了。對於那些可以使用 shell 但不習慣使用控制檯編輯器的學生,最流行的選擇是 Nano,它提供了很好的互動式選單和類似於 Windows 圖形文字編輯器的體驗。

我有時會用 Nano,但當我聽說 Vi/VimEmacs 能做一些很棒的事情時我決定試一試它們(主要是因為它們看起來很酷,而且我也很好奇它們有什麼特別之處)。第一次使用 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 <FILE_NAME>,其中 <FILE_NAME> 表示要建立或修改的目標檔名。讓我們通過輸入 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 和Enter鍵來再次開啟這個檔案。你可以在插入模式中修改檔案。首先,通過 Esc 鍵來確定你正處於正常模式。接著輸入 i 來進入插入模式(沒錯,就是字母 i)。

在左下角,你將看到 -- INSERT --,這標誌著你這處於插入模式。

Vim insert mode

寫一些 Java 程式碼。你可以寫任何你想寫的,不過這也有一份你可以參照的例子。你的螢幕將顯示如下:

public class HelloWorld {
  public static void main([String][11][] args) {
  }
}

非常漂亮!注意文字是如何在 Java 語法中高亮顯示的。因為這是個 Java 檔案,所以 Vim 將自動檢測語法並高亮顏色。

儲存檔案:按下 Esc 來退出插入模式並進入命令列模式。輸入 : 並接著 x! (完整命令::x!),按Enter鍵來儲存檔案。你也可以輸入 wq 來執行相同的操作。

現在,你知道了如何使用插入模式輸入文字並使用以下命令儲存檔案::x! 或者 :wq

第 3 步:Vim 中的基本導航

雖然你總是可以使用上箭頭、下箭頭、左箭頭和右箭頭在檔案中移動,但在一個幾乎有數不清行數的大檔案中,這將是非常困難的。能夠在一行中跳躍游標將會是很有用的。雖然 Vim 提供了不少很棒的導航功能,不過在一開始,我想向你展示如何在 Vim 中到達某一特定的行。

單擊 Esc 來確定你處於正常模式,接著輸入 :set number 並鍵入回車。

瞧!你現在可以在每一行的左側看到行號。

Showing Line Numbers

好,你也許會說,“這確實很酷,不過我該怎麼跳到某一行呢?”再一次的,確認你正處於正常模式。接著輸入 :<LINE_NUMBER>,在這裡 <LINE_NUMBER> 是你想去的那一行的行數。按下Enter鍵來試著移動到第二行。

: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

這就是刪除delete命令。不要擔心,鍵入 u,你會發現這一行又回來了。喔,這就是撤銷undo命令。

Undoing a change in Vim

下一課是學習如何複製和貼上文字,但首先,你需要學習如何在 Vim 中突出顯示文字。按下 v 並向左右移動游標來選擇或反選文字。當你向其他人展示程式碼並希望標識你想讓他們注意到的程式碼時,這個功能也非常有用。

Highlighting text in Vim

來到第四行,這裡的程式碼是 System.out.println("Hello, Opensource");。高亮這一行的所有內容。好了嗎?當第四行的內容處於高亮時,按下 y。這就叫做複製yank模式,文字將會被複制到剪貼簿上。接下來,輸入 o 來建立新的一行。注意,這將讓你進入插入模式。通過按 Esc 退出插入模式,然後按下 p,代表貼上paste。這將把複製的文字從第三行貼上到第四行。

Pasting in Vim

作為練習,請重複這些步驟,但也要修改新建立的行中的文字。此外,請確保這些行對齊工整。

提示: 您需要在插入模式和命令列模式之間來回切換才能完成此任務。

當你完成了,通過 x! 命令儲存檔案。以上就是 Vim 基本編輯的全部內容。

第 5 步:Vim 中的基本搜尋

假設你的團隊領導希望你更改專案中的文字字串。你該如何快速完成任務?你可能希望使用某個關鍵字來搜尋該行。

Vim 的搜尋功能非常有用。通過 Esc 鍵來進入命令模式,然後輸入冒號 :,我們可以通過輸入 /<SEARCH_KEYWORD> 來搜尋關鍵詞, <SEARCH_KEYWORD> 指你希望搜尋的字串。在這裡,我們搜尋關鍵字串 Hello。在下面的圖示中沒有顯示冒號,但這是必須輸入的。

Searching in Vim

但是,一個關鍵字可以出現不止一次,而這可能不是你想要的那一個。那麼,如何找到下一個匹配項呢?只需按 n 鍵即可,這代表下一個next。執行此操作時,請確保你沒有處於插入模式!

附加步驟:Vim 中的分割模式

以上幾乎涵蓋了所有的 Vim 基礎知識。但是,作為一個額外獎勵,我想給你展示 Vim 一個很酷的特性,叫做分割split模式。

退出 HelloWorld.java 並建立一個新檔案。在控制檯視窗中,輸入 vim GoodBye.java 並按Enter鍵來建立一個名為 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 <FILE_NAME> 命令。(代替 :split <FILE_NAME> 命令,<FILE_NAME> 指你想要使用分割模式開啟的檔名)。

提示 2: 你可以通過呼叫任意數量的 split 或者 vsplit 命令來開啟兩個以上的檔案。試一試,看看它效果如何。

Vim 速查表

在本文中,您學會了如何使用 Vim 來完成工作或專案,但這只是你開啟 Vim 強大功能之旅的開始,可以檢視其他很棒的教程和技巧。

為了讓一切變得簡單些,我已經將你學到的一切總結到了 一份方便的速查表 中。


via: https://opensource.com/article/19/3/getting-started-vim

作者:Bryant Son 選題:lujun9972 譯者:Modrisco 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出