全部產品
Search
文件中心

Elastic Compute Service:Vim編輯器

更新時間:Nov 15, 2024

Vim是Linux中常見的的文本編輯工具,在日常系統營運、編寫Shell指令碼等情境會經常用到。本文介紹Vim編輯器的基本命令和模式切換,協助您快速上手使用Vim編輯器。

安裝情況

Linux系統都已經預設安裝Vim工具,您無需進行安裝。在終端中輸入vim --version查看Vim版本資訊。本文檔以vim 8.0版本為例進行介紹,其他版本可能存在差異,請參考使用。

VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Aug 10 2022 11:26:47)
Included patches: 1-1763
Modified by OpenAnolis Community
Compiled by OpenAnolis Community
Huge version without GUI.  Features included (+) or not (-):
+acl               +farsi             +mouse_sgr         -tag_any_white
 ......

模式切換

使用命令 vim filename開啟檔案,即進入普通模式。如果檔案不存在,Vim會建立一個檔案。Vim的各個模式及切換方法如下所示。

模式

作用

模式轉換

普通模式

(Normal Mode)

在該模式下,您可以複製、粘貼、刪除字元或行。

  • 運行vim <檔案名稱>開啟檔案時,即進入普通模式。

  • 在其他四個模式下,按Esc鍵即進入普通模式。

插入模式

(Insert Mode)

在該模式下,您可以插入字元。

在普通模式下,按i,I,a,A,o,O中任一字元即進入插入模式。

說明

進入插入模式後,編輯器左下角會顯示-- INSERT --

替換模式

(Replace Mode)

在該模式下,您可以替換字元。

在普通模式下,按R即進入替換模式。

說明

進入替換模式後,編輯器左下角會顯示-- REPLACE --

可視模式

(Visual Mode)

在該模式下,您可以選擇文本。命令(如,複製、替換、刪除等)僅作用於選中的文檔。

在普通模式下,按v即進入可視模式。

說明

進入可視模式後,編輯器左下角會顯示-- VISUAL --

命令模式

(Command Mode)

在該模式下,您可以尋找字串、替換字串、顯示行號、儲存修改、退出編輯器等。

在普通模式下,按:即進入命令模式。

基本命令

開啟檔案

  • vim filename:開啟單個檔案。進入普通模式,如果檔案不存在,Vim會建立一個檔案。

  • vim filename1 filename2: 開啟多個檔案。

    • 預設進入第一個filename1,正常編輯並使用:w儲存filename1後,輸入:bn進入下一個filename2,正常編輯並使用:w儲存filename2。

    • 輸入:bp進入前一個filename1。

    • 輸入:ls可以查看編輯列表。

  • :open filename3:在Vim的命令模式下開啟一個新的檔案進行編輯。執行該命令前,請先使用:w儲存原編輯檔案。

移動游標

  • 在普通模式下

    • 方向鍵上/k:游標向上移動。

    • 方向鍵下/j:游標向下移動。

    • 方向鍵左/h:游標向左移動。

    • 方向鍵右/l:游標向右移動。

  • 在插入模式下

    • 只能通過上、下、左、右方向鍵移動游標。

插入內容

在普通模式下,按i,I,a,A,o,O中任一字元即進入插入模式。

  • i:在當前字元的左邊插入。

  • I:在當前行的行首插入 。

  • a:在當前字元的右邊插入。

  • A:在當前行的行尾插入。

  • o:在當前行下面插入一個新行。

  • O:在當前行上面插入一個新行。

複製和粘貼

類似於Word文檔編輯器裡Ctrl+C和Ctrl+V。在普通模式下:

  • yy:複製游標所在的行內容。可以直接使用p進行粘貼。

  • nyy:n為數字。例如2yy,複製游標所在行和下一行內容,即複製2行。

  • p:粘貼到游標所在的下一行。

  • P:粘貼到游標所在的上一行。

刪除

  • 在普通模式下

    • 刪除單個字元:按鍵盤 x鍵刪除當前游標所在位置的字元。

    • 刪除整行:按鍵盤 dd刪除當前行。類似於Word文檔編輯器裡Ctrl+X,可以直接使用p進行粘貼。

    • 刪除上一行:按鍵盤 dk刪除當前行和上一行。

    • 刪除下一行:按鍵盤 dj刪除當前行和下一行。

    • dG:按鍵盤 dG刪除當前行至文檔末尾。

    • nx: n為數字。刪除游標高亮的字元及其後面的n-1個字元。

    • ndd:n為數字。刪除游標所在行及其下面的n-1行。類似於Word文檔編輯器裡Ctrl+X,可以直接使用p進行粘貼。

  • 在插入模式下

    • 將游標移動到想要刪除內容的右側,鍵入Delete鍵

查詢

在普通模式下

  • /text:查詢text,預設精確匹配,斷行符號後高亮顯示命中字元。

    • 如果要忽略大小寫進行查詢,先執行:set ignorecase。執行:set noignorecase返回精確匹配。

  • n:游標向下查詢或下一個。

  • N:游標向上查詢或上一個。

替換

  • 在普通模式下

    • r:直接替換游標高亮的字元。

    • R:進入替換模式,連續替換游標高亮的字元,直至按下Esc鍵退出替換模式。

    • cc:直接刪除游標所在的行,並進入插入模式。

    • :%s/oldtext/newtext/g:查詢所有oldtext並替換為newtext。/g表示全部替換,若不加,則只替換所有行的第一個匹配。

  • 在插入模式下

    • 通過刪除內容、插入內容的方式進行內容替換。

撤銷與重做

在普通模式下

  • u:撤銷插入或修改。類似於Word文檔編輯器裡的Ctrl+Z

  • U:撤銷對上一次行內容的所有插入和修改。

  • Ctrl+r:重做,即恢複撤銷。相當於Word文檔編輯器裡的重做Ctrl+Y

縮排與排版

  • 在普通模式下

    • >>:整行向右縮排。預設值為8,即預設縮排一個定位字元(Tab)的空格數。

    • <<:整行負值縮排。

  • 在命令模式下

    • :ce:整行置中對齊。

    • :le:整行向靠左對齊。

    • :ri:整行向靠右對齊。

注釋代碼

說明
  • 備份檔案:在執行大範圍替換操作前,建議備份檔案或及時使用撤銷功能(u)以防誤操作。備份命令可參考sudo cp /etc/text.txt /etc/text.txt.bak

  • Regex:確保理解 Vim Regex的含義,避免意外刪除不相關內容。在 Vim 的Regex中,/ 需要轉義為 \/。如果您對Regex不夠熟悉,可以使用Regex101等工具進行練習和調試。

  • 不同語言的注釋風格:根據具體使用的程式設計語言調整替換命令中的注釋符。

  • 在可視模式下

    • 注釋連續多行代碼

      1. 上下移動游標選中待注釋的行。

      2. :進入命令列模式,此時會自動填滿 :'<,'>,表示對選中的範圍進行操作。

      3. 輸入替換命令,例如要在每行前添加 #,輸入 s/^/#/ 然後按 Enter

    • 注釋所有代碼:輸入替換命令:%s/^/#/g,全文使用#進行注釋。

  • 在插入模式下

    手動插入注釋符號的方式注釋代碼。

儲存與退出

  • 儲存檔案:在普通模式下輸入 :w並按下斷行符號鍵。

  • 退出 Vim:輸入 :q並按下斷行符號鍵。

  • 儲存並退出:輸入 :wq或 :x並按下斷行符號鍵,或直接使用ZZ命令。

  • 強制退出不儲存:輸入 :q!並按下斷行符號鍵。

  • 強制退出並儲存:輸入 :wq!並按下斷行符號鍵。

加密文檔

  • 對文檔進行加密:vim -x filename。自行設定密碼後,進入普通模式。注意必須儲存一次,否則加密不會生效。再次進入時需要進行密碼驗證。

  • 取消文檔加密。

    1. 在 Vim 中,執行命令:set key=取消加密。這條命令將清空當前檔案的加密金鑰,從而移除加密設定。

    2. 使用:wq命令儲存並退出。

    3. 再次執行vim filename開啟檔案,不再出現密碼驗證提示。

執行命令

  • !pwd:在不退出Vim情況下,顯示當前工作目錄。

  • !ls:在不退出Vim情況下,列出目前的目錄下的檔案和檔案夾。

多視窗編輯

  • vim -o filename1 filename2:同時開啟兩個視窗顯示檔案。退出時需要分別執行退出命令。

  • :n:切換到另一個檔案視窗,進行編輯。

  • :N:返回到上一個檔案視窗,進行編輯。

協助文檔

  • 在終端中輸入vim --help查看Vim命令文法協助資訊。

  • 在普通模式下

    • :help:查看Vim協助文檔。Vim協助文檔為唯讀,輸入:q可退出協助文檔。

    • :help i:顯示i的協助文檔。

    • :help yy:顯示yy的協助文檔。

    • :set nu:顯示行號。

樣本

修改設定檔

在設定檔example.conf的第一行,插入Location。步驟如下:

  1. 運行vim example.conf命令開啟檔案,進入普通模式。

  2. 當前游標在該檔案的第一個字元,按鍵盤i進入插入模式。

  3. 輸入Location,按斷行符號鍵換行。

  4. 按鍵盤Esc鍵退出插入模式。

  5. 輸入:wq儲存檔案並退出。

    example-1-1-2.gif

在目標行插入內容

在設定檔example.conf第10行的行首,插入#。步驟如下:

  1. 運行vim example.conf命令開啟檔案,進入普通模式。

  2. 按鍵盤:10將游標定位到第10行。

  3. 按鍵盤i進入插入模式。

  4. 輸入#

  5. 按鍵盤Esc鍵退出插入模式。

  6. 輸入:wq儲存檔案並退出。

    example-2-1-2.gif

尋找並插入內容

在設定檔example.conf中,在Include conf.modules.d/*.conf行的下一行插入LoadModule rewrite_module modules/mod_rewrite.so。步驟如下:

  1. 運行vim example.conf命令開啟檔案,進入普通模式。

  2. 運行/Include conf.modules.d/*.conf找到目標行。

  3. 按鍵盤i進入插入模式。

  4. 輸入LoadModule rewrite_module modules/mod_rewrite.so

  5. 按鍵盤Esc鍵退出插入模式。

  6. :wq儲存檔案並退出。

    example-3-1-2.gif

刪除內容

在設定檔example.conf中,將#Listen 12.34.XX:XX:80行首的#刪除,並刪除Listen 80 。步驟如下:

  1. 運行vim example.conf命令開啟檔案,進入普通模式。

  2. 運行/#Listen 12.34.XX:XX:80找到目標,此時游標定位在#字元上。

  3. 按鍵盤x刪除#

  4. 游標移到Listen 80 ,按鍵盤dd刪除該行。

  5. 輸入:wq儲存檔案並退出。

    delete-1.gif

編輯Docker.yaml

建立並編輯docker-compose.yaml檔案,樣本如下。

vim docker-yaml-2.gif

去除多行注釋

  1. 假設注釋#位於行首,可能有空格和縮排:

    # This is a comment
        # Another comment
    # Yet another comment
  2. 執行以下命令:

    :%s/^\s*#\s\?//

    說明:

    • ^:匹配行首。

    • \s*:匹配任意數量的空白字元(用於處理縮排)。

    • #:注釋符號。

    • \s\?:匹配注釋符後的一個可選空格。

    • //:表示將匹配到的內容替換為空白,即刪除。

    命令會遍曆整個檔案,去除後檔案如下所示:

    This is a comment
    Another comment
    Yet another comment

升級Vim

如果當前作業系統的Vim不滿足您的需求,您可以執行以下命令進行軟體版本升級。

Alibaba Cloud Linux 3/2

sudo yum update vim

CentOS 7/8

sudo yum update vim

Fedora

sudo yum update vim

Ubuntu / Debian

sudo apt upgrade vim

openSUSE

sudo zypper update vim

常見錯誤

  • 退出時提示“No Write...”:

    • 錯誤原因:檔案有改動但沒有儲存。

    • 解決方案:使用 :wq儲存並退出,或 :q!放棄修改並退出。

  • 無法輸入文本:

    • 錯誤原因:可能處於可視模式。

    • 解決方案:按 Esc鍵返回正常模式,然後進入插入模式。

  • 無法儲存檔案:

    • 錯誤原因:可能沒有許可權。目前使用者對目標檔案或其所在的目錄沒有寫入權限。例如,系統設定檔(如/etc/hosts/etc/nginx/nginx.conf等)通常需要超級使用者權限才能修改。

    • 解決方案1:使用 sudo 命令以超級使用者權限啟動Vim。例如sudo vim example.conf

    • 解決方案2:使用:w !sudo tee %以管理員權限儲存當前檔案。如果需要變更設定檔的許可權和歸屬,可進一步使用sudo chownsudo chmod等命令。

  • 存在“.swp”尾碼檔案:

    • 錯誤原因:檔案被其他Vim會話開啟。

    • 解決方案:確認沒有其他終端正在編輯該檔案,通過ll -a查詢並刪除.swp檔案,然後再進行編輯;或者使用:recover命令進行恢複後進行編輯。