最近因為在學 K8s,常常會需要有編輯 pod 之類的情境,所以會需要使用到 vim,但我跟 vim 其實很不熟,所以趁這次學 K8s 順便把 vim 也一起學一學。
基本指令
- 移動 cursor:
h
往左,j
往下,k
往上,l
往右。 - 退出 vim
:q!
: 強制退出,不儲存修改:wq
: 儲存修改並且退出
i
: 進入編輯模式
刪除指令
dw
: 從 cursor 目前位置刪除到單字的尾巴,包括空格de
: 同上,但不包括空格d$
: 從 cursor 目前位置刪除到行尾dd
: 刪除一整行x
: 刪除一個字元u
: undoU
: 將該行恢復到最初的狀態CTRL+R
: redo
一個指令的格式是 [number] command object
,或是 command [number] object
。
number
: 指令執行的次數command
: 指令,例如d
代表刪除object
: 操作對象,例如 w 代表單字,$ 代表行尾。
所以我們如果要刪除 5 行的話,可以輸入 5dd
。
當我們使用刪除指令後,刪除的內容會被存進 vim 的 buffer,這時候可以使用 p
來貼上被刪除的內容。
替換指令
輸入 r
之後再輸入任意字元,可以把 cursor 指到的字元替換成輸入的字元。
輸入 R
則可以連續替換字元,直到按下 ESC。
更改指令
輸入 cw
會把 cursor 指到的字元刪除,並且進入編輯模式。c$
則是把 cursor 後的所有內容刪除,並且進入編輯模式,當我們想改掉整行的時候可以使用。
定位指令
CTRL+G
: 顯示當前行數SHIFT+G
: 移動到文件最後一行100 SHIFT+G
: 移動到第 100 行
搜尋指令
輸入 /
並且加上想要搜尋的字後按下 enter ,就會定位到目標位置,例如我現在要搜尋 hello
,就需要輸入 /hello
然後按下 enter。接著可以按下 n
去尋找下一個, SHIFT+N
尋找上一個。
:set ic
會忽略大小寫(ic = Ignore case)。
:set hsl
會 highlight 搜尋到的字詞。
:set ic
會在輸入搜尋單詞的同時定位到單詞的位置。
/
會找第一個,要從最後一個開始找的話,可以使用?
,這時候n
跟SHIFT+N
代表的意義也會反過來。
搜尋配對的括號
如果要找出對應的括號,可以按下 %
,這時候會跳到對應的括號所在地,例如當我在 (
按下 %
,就會跳到對應的 )
。
修正錯誤
輸入 :s/old/new
可以把 cursor 指到行數的第一個 "old" 單詞換成 "new",如果要整行都換掉的話可以輸入 :s/old/new/g
,這樣該行所有的 "old" 都會被換成 "new"。
如果要替換指定行數之間的詞,可以輸入 :10,20s/old/new/g
,這樣會把第 10 行到第 20 行之間的所有 "old" 都替換成 "new"。
如果是要替換整個文件的詞,可以輸入 :%s/old/new/g
這樣整個文件的 "old" 都會被替換成 "new"。如果在替換過程中詢問是否確認要替換的話可以輸入 :%s/old/new/gc
,這樣要替換每個單詞時,都會詢問是否確認要替換。
執行外部指令
輸入 :!
加上對應的指令可以切換到 terminal 的畫面並且執行指令,例如 :!ls
會列出檔案和資料夾。
儲存指令
輸入 :w FILENAME
可以將文件內容寫到指定的檔案中,例如 :w text.txt
會將文件內容寫到 text.txt
中。
輸入 :#,# w FILENAME
則可以將指定行數的內容寫到指定的檔案中,例如 :100,120 w text.txt
會將第 100 至 120 行的內容寫到 text.txt
中。
插入及合併
輸入 :r FILENAME
可以將指定檔案的內容寫到當前游標指到的位置,例如 :r text.txt
就是把 text.txt
的內容寫到當前游標的位置。
o
: 插入新一行至該行下面,並且進入編輯模式O
: 插入新一行至該行上面,並且進入編輯模式a
: 在游標之後進入編輯模式A
: 在行尾進入編輯模式。這個指令在要插入字元到行尾的時候很有用,當我們使用$
移動到行尾,並且用i
進入編輯模式時,游標會在最後一個字元上,這時候輸入的字元會被插在最後一個字元之前。如果這時候我們使用A
的話,就可以直接在字元之後進行編輯。
複製貼上
yy
: 複製該行yw
: 複製單詞,只會複製游標後的字詞,假設有一單字 "hello",而游標在 "e" 的話,會複製 "ello"yiw
: 複製整個單詞,不管游標在單詞的哪個位置yaw
: 同上,但也會複製單詞前或後的空格p
: 貼上
縮排
>>
: 向右縮排<<
: 向左縮排
要更改縮排的大小可以輸入 :set shiftwidth=2
。
總結
有興趣想要玩 vim 的話,可以在 terminal 輸入 vimtutor
進入教學,裡面教到的指令都滿常用的。