在 Linux 上開始使用 Vim

想像一下,你深陷於你的Linux系統中,拼命地嘗試編輯一個檔案,每次嘗試都像是解讀古老密碼一樣。如果你點來點去越點越迷失,為什麼不轉向使用Linux上的Vim呢?

在這個教程中,你將揭開Vim的秘密,這是一個廣受好評的文字編輯器,讓你從一個Linux漫遊者轉變為一個指令行高手。

拿起你的象徵性劍(也就是你的鍵盤),踏上Vim的世界吧!

先備條件

以下是一些先備條件,為你在Linux系統上精通Vim做好準備:

  • A Linux OS – This tutorial uses an Ubuntu 22.04 LTS.

使用Vim在Linux上創建和編輯檔案

Vim有不同的模式,每個模式都提供獨特的編輯能力。但在進入這些模式之前,你首先需要學習如何在Linux上使用Vim創建和編輯檔案。

按照以下步驟來創建和編輯一個檔案:

1. 在終端機中執行以下vim命令來創建一個名為sshd_config(任意)的文件。如果該文件不存在,此命令將自動創建該文件。否則,將打開現有文件。

如果您創建了一個新文件,Vim的界面看起來像下面的示例,這表示Vim目前處於命令模式。命令模式是您在Vim編輯器中與文本交互的主要模式之一。

Creating a new file via Vim for Linux

2. 接下來,將下面的文本複製到剪貼板中,該文本包含純粹用於演示的樣本SSH服務器設置,並不反映實際的服務器配置。

3. 在Vim中,按下i,進入插入模式的命令。插入模式也是Vim的主要模式之一,它允許您輸入並修改文檔的內容。

一旦進入插入模式,狀態行將顯示— INSERT —,如下所示。

Entering the insert mode on Vim

4. 現在,按下Ctrl+Shift+V或Shift+Insert將您在第二步中複製的文本粘貼到Vim編輯器中,然後按Esc退出插入模式(切換到命令模式)。

請注意,— INSERT —狀態消失,這表示您又回到了命令模式。

Inserting the copied text into Vim

5. 最後,輸入:w命令並按Enter保存對文件的更改,而不關閉編輯器。

必要時,您可以執行下面的其他命令:

Command Details
:q! Quit the editor without saving the changes.
:w! Write the current file changes forcefully.
:wq Save the changes and quit the editor (or :wq! to save and quit forcefully).
e! Revert to the last saved version of the file.
Saving the changes

狀態列顯示寫入文件的數據大小,這裡是23行(23L)和624字節(624B)。

Verifying the changes are saved

在Vim中導航文本

掌握使用Vim創建和編輯文件後,您將深入研究一項關鍵技能,這將提升您的文本編輯能力-在Vim中導航。有效的導航是解鎖Vim潛力的關鍵,就像探索廣闊的風景一樣。

繼續閱讀以下關於在Vim中導航文本的步驟:

1. 現在,輸入 :set nu 命令,然後按Enter鍵,在Vim上啟用行號。行號是處理代碼或大型文檔時的關鍵編輯器功能。

如果成功,您將在編輯器中看到行號,如下所示。

Setting the line numbering

2. 接下來,切換到命令模式(Esc),然後按 gg 命令跳轉到文件的開頭。

Jumping to the beginning of the file

3. 繼續按以下任意命令,直到達到 MaxSessions 參數的開頭,然後按 $ 將游標移動到行的末尾。

Command Details
h Move the cursor to the left or the previous character.
j Move the cursor one line down.
k Move the cursor one line up.
l Move the cursor to the right or the next character.
Placing the cursor at the end of the MaxSessions line

4. 現在,用以下內容替換一段文本:

  • i 切換到插入模式。
  • 刪除值(退格鍵或刪除鍵),即 10,然後替換為 25
  • 切換到命令模式(Esc)並保存更改(:w)。
Editing a text in Vim

在特定位置插入文本

Vim提供了一系列命令,可以精确控制插入新文本的位置和方式(恰好在您需要的位置)。无论您希望在一行的开头、当前光标位置之后还是一行的末尾插入,该功能都能正常工作。

为了了解如何在特定位置插入文本,执行以下操作:

1. 当光标位于行末时,按下I(Shift+I)进入插入模式,并同时将光标定位在行的开头。

Inserting at the beginning of the line

2. 切换到命令模式(Esc),将光标移动到当前行文本中的任意其他字符(即开头处),然后按下a命令。

该命令将Vim切换到插入模式,并将光标定位在前一个位置的下一个字符上。这个行为非常方便,可以在不破坏现有文本的情况下快速添加文本到一行的中间位置。

Inserting at the current cursor point

3. 输入‘y’以将MaxSession键拼写为MyaxSession,如下所示,并返回到命令模式(Esc)。

您会注意到新字符‘y’立即出现在第一个字符之后。

Inserting a character within a line of text

4. 现在,按以下方式修改文本行:

  • 按下Shift+A执行A命令,这使Vim进入插入模式,并将光标移动到行的末尾。这个行为非常适合快速添加内容,比如分号或者结束一个句子。
  • 在行末附加0,将值更改为250
  • 返回命令模式(`Esc`),並保存更改(`:w`)。
Appending text to the end of the line

開啟新行

現在,您已經掌握了在Vim文件中策略性地放置文本,是時候探索一個能夠保持您內容結構良好並有組織的技能了。在Vim中開啟新行的能力是讓您的文本更易讀和美觀的關鍵。

要在上方或下方開啟新行,請完成以下步驟:

1. 在命令模式下,按下`o`鍵在當前文本行下方開啟一個新行,並添加關於MyaxSessions的以下註釋。

# 注意:根據伺服器負載調整maxSessions
Adding a new line below the current line of text

2. 切換到命令模式(按`Esc`鍵),將游標移動到另一行文本上,然後按`O`(Shift+O)在當前文本行上方添加一個新行。

Adding a new line above the current line of text

3. 現在,將以下命令添加到文件中並保存更改(`:w`)。

# 注意:謹慎使用日誌級別以避免性能問題
Populating the new line of text

刪除單詞和文本行

Vim提供了有效的命令來刪除和替換文本,超出了基本的刪除或退格鍵。這些命令可以從命令模式訪問,使您能夠快速進行修改和更正,從而可以刪除或替換字符、單詞或整行。

要在Linux的Vim中刪除和替換文本,執行以下操作:

1. 把游標移到MyaxSessions參數,具體位置在 ‘ y ‘ 字元上。

Placing the cursor at a specific character

2. 接著,按下 x 鍵即可立即移除游標下的字元,這個例子中是 ‘ y ‘。

該參數恢復到原始文本MaxSessions,如下所示。

Deleting a character under the cursor

3. 把游標移到行 PermitRootLogin no:

Positioning the cursor

4. 現在,按下 "_dd 鍵刪除整行文字,不論游標位置在哪。

命令中的 "_ 指定黑洞寄存器,將刪除的文字丟棄(不會存儲在任何寄存器中)。

Vim有自己的一套 寄存器 用於存儲文字,不指定黑洞寄存器會導致命令切割文本而不是刪除它。

成功後,你會注意到 PermitRootLogin no: 行不見了。

Deleting an entire line of text

5. 在命令模式下,把游標放在行 Specifies 中單詞的開頭。

Placing the cursor at the beginning of a word

6. 最後,執行 "_dw 命令,刪除單詞 Specifies 如下所示:

Deleting a word

此外,你還可以選擇使用以下命令進行額外的刪除操作:

Command Details
"_d$ Delete texts from the cursor position to the end of the line.
"_D Deletes from the cursor position to the end of the line.
"_d^ Deletes from the cursor position to the first non-whitespace character of the line
"_dgg Deletes from the cursor position to the beginning of the file.
"_dG Deletes from the cursor position to the end of the file.

替換字符和文本行

從Vim中的策略性刪除,轉而將注意力轉向硬幣的另一面——替換字符和文本行。替換是使您能夠精確調整和重新定義文本的筆觸。好消息是,Vim允許您執行一次性字符替換或整行文本。

要替換字符和文本行,請繼續執行以下任務:

1. 將光標定位在行AuthorizedKeysFile .ssh/authorized_keys上,特別是在下面所示的“z”字符的authorized中:

Positioning the cursor

2. 一旦定位,按r,告訴Vim您將替換光標下的字符,並輸入“s”字符。 r命令允許您在進入插入模式(i)之前替換字符。

請注意,在authorized中,“z”字符已被替換為“s”字符,將單詞更改為authorised

Replacing a character within a line of text

3. 接下來,將光標放在AuthorizeKeysFile中的字符“’z’”。

Placing the cursor on another character

4. 按下R(Shift+R)進入替換模式,輸入“s”以替換字符,但不要退出替換模式。

與只允許替換一個字符的r命令不同,R命令允許您在持續輸入時覆蓋現有文本。

Entering replace mode

5. 最終,將以下文本複製到剪貼板中,將光標移動到文件的開頭,並粘貼您複製的文本(Ctrl+Shift+V或Shift+Insert)。

由於您仍處於替換模式,粘貼文本將替換文件中的第一行。

Overwriting an entire line of text via the replace mode

在文件中搜索文本

在重做或撤消操作中涉及時,搜索文件中的文本技巧非常方便。Vim允許您在文件中搜索特定的單詞、短語或模式。

想像一下,當您可以迅速定位並操作特定文本部分而不是盲目地滾動時,生產力的飛躍提升。

要在文件中搜索文本,請按照以下步驟進行:

1. 將光標移動到文件的開頭(使用gg命令),按下/(斜杠)進入搜索模式,輸入搜索詞log,然後按Enter鍵。

此命令將搜索指定的詞(log),將光標向前移動到該詞的下一個出現位置。

Searching for the term “log”

2. 接下來,按下n移動到該詞的下一個出現位置。

Moving to the next occurrence of the term “log”

3. 現在,按下N(Shift+N)返回到上一個出現位置。

Moving back to the previous occurrence of the term “log”

此外,Vim還提供其他搜索快捷鍵,以增加搜索靈活性:

Command Details
? Initiates a reverse search of a term.
* Performs a forward search for the word under the cursor. Continue pressing * to cycle through further occurrences of the word until it loops back to the first instance.
# Performs a backward search for the word under the cursor. Continuously pressing # works similarly to the * command but cycles until it loops back to the last instance.

將搜索與Vim的其他命令結合使用

當您在Vim中瀏覽複雜的景觀時,為何不在文本編輯的技巧中再增加一個層次 —— 將搜索與其他命令結合使用?

Vim 讓您從替換特定出現次數到刪除匹配模式的行動。

要在 Vim 中見證搜索和操作之間的協同作用,請執行以下操作:

1. 在命令模式下,將游標放在您想要開始刪除的起始點(即搜索詞 log 的第一個出現位置)

Positioning the cursor at the first occurrence of the term “log”

2. 接下來,輸入 d/log 並按 Enter 鍵,刪除從游標位置到下一個 log 出現位置的所有內容,如下所示:

Deleting everything from the cursor up to the next occurrence of “log”

3. 撤銷上一個操作(u 命令),將游標放在搜索詞 log 的第一個出現位置。

Placing the cursor at the first instance of the search term “log”

4. 現在,執行以下命令來搜索和替換指定範圍內的文本,其中:

  • :. – 在當前行(.)輸入命令模式(:)。
  • ,$ – 指定替換的範圍。
  • s/log/logs/g – Substitute all occurrences of the old word (log) with new (logs) globally (g) within the specified range.
Replacing all occurrences of the term “log” with “logs” within a specified rage

在 Vim 的可視模式中選擇文本

除了在 Vim 中將搜索技術與其他命令混合使用之外,您還必須揭示一個功能,該功能可以改變您的文本編輯體驗。 Vim 的可視模式允許您更加互動和可視地操作文本。 可視模式提供了一種靈活和高效的方法,用於突出顯示和操作文本的部分。

要選擇和編輯文本,您可以選擇選擇和編輯個別字符或選擇和編輯文本塊,方法如下:

1. 移動游標至文件開頭(gg命令),按下v以啟動視覺模式,如下所示。

Entering visual mode

2. 按下$以將游標移到該行的末尾。由於您處於視覺模式,此命令會突顯該行文本。

Highlighting a line of text

3. 現在,執行以下複製和粘貼操作:

  • 按下y將突顯的文本複製到Vim的寄存器中。
  • 按下G$將游標移到文件中最後一行的末尾。
  • 按下p以粘貼您複製的文本(特別是在游標後)。
    請注意,p命令與粘貼文本的快捷鍵(Ctrl+Shift+V或Shift+Insert)不同。當您使用y命令複製文本時,文本會存儲在Vim的寄存器中,p命令則從寄存器中粘貼文本。
Copying and pasting a line of text after the cursor
Copying and pasting a line of text at the cursor’s position

4. 撤消(u)您之前的操作,將游標移動到文件開頭(gg),並按下V(Ctrl+V)以進入視覺行模式。

與在視覺模式中選擇單行不同,視覺行模式允許您選擇多行文本,這將在下一步中看到。

Entering visual line mode

5. 使用向下箭頭鍵選擇從文件開頭到協議 2行的字符。

Selecting multiple lines of text via visual line mode

6. 按下d以刪除所選的多行文本。

Cutting multiple lines of text

7. 最後,按照以下方式粘貼您在第六步中切割的文本:

  • 移動到文件中的最後一行(G),在其下創建一個新行(o)。
  • 返回到命令模式(Esc),並粘貼文本(p)。
Pasting multiple lines of text

結論

恭喜!您已經探索了Vim for Linux的精細領域,並在這個過程中解鎖了一個文本編輯智慧的寶庫。從創建和編輯文件到掌握視覺模式的藝術,您已經戴上了Vim大師的帽子。

但是,您的命令行冒險才剛剛開始。為什麼不探索像插件樣的高級功能,以定製Vim滿足您的需求?

利用這些基礎技能來探索Vim的更深層次,例如文件管理複雜的搜索模式用於個性化的Vim腳本

Source:
https://adamtheautomator.com/vim-for-linux/