Linux中國

Vim 入門:基礎

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

![Real Programmers comic](/data/attachment/album/201904/20/104307h6o5ntn9h225onn0.jpg "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](/data/attachment/album/201904/20/104312nbyok8arxho0bnok.jpg "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](/data/attachment/album/201904/20/104313nxbiqx37yq3kk5qx.jpg "Editing Vim")

在正常模式下輸入冒號會將 Vim 切換到命令行模式,執行 :q! 命令將退出 Vim 編輯器而不進行保存。換句話說,你放棄了所有的更改。你也可以使用 ZQ 命令;選擇你認為更方便的選項。

一旦你按下 Enter (回車),你就不再在 Vim 中。重複練習幾次來掌握這條命令。熟悉了這部分內容之後,請轉到下一節,了解如何對文件進行更改。

第 2 步:在 Vim 中修改並保存

通過輸入 vim HelloWorld.java 和回車鍵來再次打開這個文件。你可以在插入模式中修改文件。首先,通過 Esc 鍵來確定你正處於正常模式。接著輸入 i 來進入插入模式(沒錯,就是字母 i)。

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

![Vim insert mode](/data/attachment/album/201904/20/104315z2klgi2lwlbvthgg.jpg "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](/data/attachment/album/201904/20/104319ow29q27wwzs00s0y.jpg "Showing Line Numbers")

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

:2

現在,跳到第三行。

![Jump to line 3](/data/attachment/album/201904/20/104322x033zctfxff9ff2z.jpg "Jump to line 3")

但是,假如你正在處理一個一千多行的文件,而你正想到文件底部。這該怎麼辦呢?確認你正處於正常模式,接著輸入 :$ 並按下回車。

你將來到最後一行!

現在,你知道如何在行間跳躍了,作為補充,我們來學一下如何移動到一行的行尾。確認你正處於有文本內容的一行,如第三行,接著輸入 $

![Go to the last character](/data/attachment/album/201904/20/104325w6poo9hhj9x6ozi9.jpg "Go to the last character")

你現在來到這行的最後一個位元組了。在此示例中,高亮左大括弧以顯示游標移動到的位置,右大括弧被高亮是因為它是高亮的左大括弧的匹配字元。

這就是 Vim 中的基本導航功能。等等,別急著退出文件。讓我們轉到 Vim 中的基本編輯。不過,你可以暫時順便喝杯咖啡或茶休息一下。

第 4 步:Vim 中的基本編輯

現在,你已經知道如何通過跳到想要的一行來在文件中導航,你可以使用這個技能在 Vim 中進行一些基本編輯。切換到插入模式。(還記得怎麼做嗎?是不是輸入 i ?)當然,你可以使用鍵盤逐一刪除或插入字元來進行編輯,但是 Vim 提供了更快捷的方法來編輯文件。

來到第三行,這裡的代碼是 public static void main(String[] args) {。雙擊 d 鍵,沒錯,就是 dd。如果你成功做到了,你將會看到,第三行消失了,剩下的所有行都向上移動了一行。(例如,第四行變成了第三行)。

![Deleting A Line](/data/attachment/album/201904/20/104329i0oripvlg8wz8lk7.jpg "Deleting A Line")

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

![Undoing a change in Vim](/data/attachment/album/201904/20/104332o8nnv8qlqqlnelim.jpg "Undoing a change in Vim")

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

![Highlighting text in Vim](/data/attachment/album/201904/20/104335ol7u6u61uprm7bmr.jpg "Highlighting text in Vim")

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

![Pasting in Vim](/data/attachment/album/201904/20/104338li1hb4qmyeq46d2h.jpg "Pasting in Vim")

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

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

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

第 5 步:Vim 中的基本搜索

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

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

![Searching in Vim](/data/attachment/album/201904/20/104340tlsr8a33l2zr2zdl.jpg "Searching in Vim")

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

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

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

退出 HelloWorld.java 並創建一個新文件。在控制台窗口中,輸入 vim GoodBye.java 並按回車鍵來創建一個名為 GoodBye.java 的新文件。

輸入任何你想輸入的讓內容,我選擇輸入 Goodbye。保存文件(記住你可以在命令模式中使用 :x! 或者 :wq)。

在命令模式中,輸入 :split HelloWorld.java,來看看發生了什麼。

![Split mode in Vim](/data/attachment/album/201904/20/104345e9e9ucep9o9cruo4.jpg "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](/data/attachment/album/201904/20/104349vqbzq47gnzq4x99u.jpg "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中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國