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 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 chown
或sudo chmod
等命令。
存在“.swp”尾碼檔案:
錯誤原因:檔案被其他Vim會話開啟。
解決方案:確認沒有其他終端正在編輯該檔案,通過
ll -a
查詢並刪除.swp
檔案,然後再進行編輯;或者使用:recover
命令進行恢複後進行編輯。