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) | 在該模式下,您可以複製、粘貼、刪除字元或行。 |
|
插入模式 (Insert Mode) | 在該模式下,您可以插入字元。 | 在普通模式下,按 說明 進入插入模式後,編輯器左下角會顯示 |
替換模式 (Replace Mode) | 在該模式下,您可以替換字元。 | 在普通模式下,按 說明 進入替換模式後,編輯器左下角會顯示 |
可視模式 (Visual Mode) | 在該模式下,您可以選擇文本。命令(如,複製、替換、刪除等)僅作用於選中的文檔。 | 在普通模式下,按 說明 進入可視模式後,編輯器左下角會顯示 |
命令模式 (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等工具進行練習和調試。不同語言的注釋風格:根據具體使用的程式設計語言調整替換命令中的注釋符。
在可視模式下
注釋連續多行代碼
上下移動游標選中待注釋的行。
按
:進入命令列模式,此時會自動填滿:'<,'>,表示對選中的範圍進行操作。輸入替換命令,例如要在每行前添加
#,輸入s/^/#/然後按Enter。
注釋所有代碼:輸入替換命令
:%s/^/#/g,全文使用#進行注釋。
在插入模式下
手動插入注釋符號的方式注釋代碼。
儲存與退出
儲存檔案:在普通模式下輸入
:w並按下斷行符號鍵。退出 Vim:輸入
:q並按下斷行符號鍵。儲存並退出:輸入
:wq或:x並按下斷行符號鍵,或直接使用ZZ命令。強制退出不儲存:輸入
:q!並按下斷行符號鍵。強制退出並儲存:輸入
:wq!並按下斷行符號鍵。
加密文檔
對文檔進行加密:
vim -x filename。自行設定密碼後,進入普通模式。注意必須儲存一次,否則加密不會生效。再次進入時需要進行密碼驗證。取消文檔加密。
在 Vim 中,執行命令
:set key=取消加密。這條命令將清空當前檔案的加密金鑰,從而移除加密設定。使用
:wq命令儲存並退出。再次執行
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。步驟如下:
運行
vim example.conf命令開啟檔案,進入普通模式。當前游標在該檔案的第一個字元,按鍵盤
i進入插入模式。輸入
Location,按斷行符號鍵換行。按鍵盤
Esc鍵退出插入模式。輸入
:wq儲存檔案並退出。
在目標行插入內容
在設定檔example.conf第10行的行首,插入#。步驟如下:
運行
vim example.conf命令開啟檔案,進入普通模式。按鍵盤
:10將游標定位到第10行。按鍵盤
i進入插入模式。輸入
#。按鍵盤
Esc鍵退出插入模式。輸入
:wq儲存檔案並退出。
尋找並插入內容
在設定檔example.conf中,在Include conf.modules.d/*.conf行的下一行插入LoadModule rewrite_module modules/mod_rewrite.so。步驟如下:
運行
vim example.conf命令開啟檔案,進入普通模式。運行
/Include conf.modules.d/*.conf找到目標行。按鍵盤
i進入插入模式。輸入
LoadModule rewrite_module modules/mod_rewrite.so。按鍵盤
Esc鍵退出插入模式。按
:wq儲存檔案並退出。
刪除內容
在設定檔example.conf中,將#Listen 12.34.XX:XX:80行首的#刪除,並刪除Listen 80 。步驟如下:
運行
vim example.conf命令開啟檔案,進入普通模式。運行
/#Listen 12.34.XX:XX:80找到目標,此時游標定位在#字元上。按鍵盤
x刪除#。游標移到Listen 80 ,按鍵盤
dd刪除該行。輸入
:wq儲存檔案並退出。
編輯Docker.yaml
建立並編輯docker-compose.yaml檔案,樣本如下。

去除多行注釋
假設注釋
#位於行首,可能有空格和縮排:# This is a comment # Another comment # Yet another comment執行以下命令:
:%s/^\s*#\s\?//說明:
^:匹配行首。\s*:匹配任意數量的空白字元(用於處理縮排)。#:注釋符號。\s\?:匹配注釋符後的一個可選空格。//:表示將匹配到的內容替換為空白,即刪除。
命令會遍曆整個檔案,去除後檔案如下所示:
This is a comment Another comment Yet another comment
升級Vim
如果當前作業系統的Vim不滿足您的需求,您可以執行以下命令進行軟體版本升級。
Alibaba Cloud Linux 3/2
sudo yum update vimCentOS 7/8
sudo yum update vimFedora
sudo yum update vimUbuntu / Debian
sudo apt upgrade vimopenSUSE
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 chown或sudo chmod等命令。
存在“.swp”尾碼檔案:
錯誤原因:檔案被其他Vim會話開啟。
解決方案:確認沒有其他終端正在編輯該檔案,通過
ll -a查詢並刪除.swp檔案,然後再進行編輯;或者使用:recover命令進行恢複後進行編輯。