使用 Vim 編輯文件
為了熟悉 Vim 的指令操作,記錄了一些基本指令
目錄
前言
Vim 是從 vi 發展出來的一個文字編輯器,功能豐富,結合了很多快捷指令能夠大幅增加編輯文件的速度,在程式設計師中被廣泛使用
入門
建立、進入檔案
vim <檔名>
編輯檔案
i
# I, o, O, a, A, r, R 也可以進入編輯模式
# i, o, a => 插入
# r => 取代
進入編輯模式
存檔並退出
按鍵盤左上角的 ESC
退出編輯模式,回到指令列命令模式,接著輸入 :wq
儲存檔案並退出
退出檔案
若無變更檔案內容並退出,只要輸入 :q
即可
強制退出就輸入 :q!
模式
指令列模式
有三個常用的指令
:! command
暫時離開 Vim 編輯器執行 command 結果,之後可以再按 Enter 回到 Vim 中:set nu
顯示行號:set nonu
取消顯示行號
尋找文字
?string
輸入?string
,找目前游標上面所有列的文字 string/string
輸入/string
,找目前游標下面所有列的文字 string
找到所有可能文字之後,透過 n
來依序顯示結果,如果要查看上一個結果可以使用 N
取代文字
:n1,n2s/word1/word2/g
n1 與 n2 為數字。在第 n1 與 n2 列之間尋找 word1 這個字串,並將該字串取代為 word2:1,$s/word1/word2/g
從第一列到最後一列尋找 word1 字串,並將該字串取代為 word2:1,$s/word1/word2/gc
從第一列到最後一列尋找 word1 字串,並將該字串取代為 word2,且在取代前顯示提示字元給使用者確認 (confirm) 是否需要取代
讀檔、存檔
:w
: 儲存檔案
:q
: 離開檔案
:wq
: 存檔並離開
若遇到唯讀檔案,可以加上 !
:w [filename]
: 將編輯的資料儲存成另一個檔案
:r [filename]
: 在編輯的資料中,讀入另一個檔案的資料
:n1,n2 w [filename]
: 將 n1 到 n2 的內容儲存成 filename 這個檔案
一般模式
有很多操作指令,只記錄常用的
移動游標
我們可以透過鍵盤控制游標的位置,藍色 x 軸代表現在所在的列,而紅色 y 軸代表檔案中的每一列,下方座標軸的原點是該列中現在游標所在的位置
5 < space >
如果要讓游標向右五個字元,可以輸入數字 5 之後再按空白鍵5 < enter >
如果要讓游標向下移動五列,可以輸入數字 5 之後再按 Enter 鍵home / 0
輸入home
或0
前往該列的首端end / $
輸入end
或$
前往該列的尾端1G (gg, 常用) / G
輸入1G
或是gg
前往檔案第一列的第一個字元
輸入G
前往檔案末端的第一個字元H / L
輸入H
前往目前螢幕第一列的第一個字元
輸入L
前往目前螢幕最末列的第一個字元
複製文字
y0 / y$
輸入y0
,代表在游標移動到該列的最前端時,同時複製文字
輸入y$
,代表在游標移動到該列的最尾端時,同時複製文字yy / nyy
輸入yy
,代表複製游標所在該列的文字
輸入nyy
,代表向下複製 n 列y1G / yG
輸入y1G
,代表複製到檔案中的第一列
輸入yG
,代表複製到游標之下的最末列
貼上文字
p / P
輸入p
,代表在游標所在列的上面一行貼上內容
輸入P
,代表在游標所在列的下面一行貼上內容
刪除文字
跟複製文字的指令非常類似
x / X
輸入x
,代表向後刪除一個字元
輸入X
,代表向前刪除一個字元d / ndd
輸入dd
,刪除游標所在的那一整列
輸入ndd
,刪除游標所在的向下 n 列
復原
u
: 復原上一個動作
ctrl+R
: 取消復原上一個動作
.
: 重複執行上一個動作
區塊選擇(Visual Block)
v | 字元選擇,會將游標經過的地方反白選擇 |
V | 列選擇,會將游標經過的列反白選擇 |
[Ctrl]+v | 區塊選擇,可以用長方形的方式選擇資料 |
y | 將反白的地方複製起來 |
d | 將反白的地方刪除掉 |
p | 將剛剛複製的區塊,在游標所在處貼上 |
結語
Vim 的指令非常多,未來有使用到其他指令再補充
Reference
To know that we know what we know, and to know that we do not know what we do not know, that is true knowledge.
Author: Andy Chung
Article link: https://chiachin2686.github.io/2021/09/use-vim-to-edit-files/
License: CC BY-NC 4.0