vim命令

李柱明發表於2022-12-04

前言

用了幾年vim,但是有些命令少用後便會忘記,時常需要百度,乾脆在這裡累積,方便直接查詢。

使用utools輔助。

便捷唯快不破。

下面鍵入的命令在實際使用時混合搭配使用,慢慢摸索即可。

原文:李柱明部落格

vim簡要知識

vim鍵盤簡圖


該圖源自百度,很久前的筆記了,沒有追查

vim模式

  1. 普通模式:Vim 啟動後的預設模式,用來移動游標、刪除文字、覆蓋輸入文字、恢復操作、貼上文字等等。
  2. 插入模式:輸入 iao 進入插入模式,在這個模式下敲擊鍵盤會往文字緩衝區增加文字,相當於普通編輯器的編輯模式。
  3. 可視模式:選擇文字,可以行選、塊選和依次選擇,選擇後可以進行復制、刪除、排序等操作。
  4. 命令模式:執行內部和外部命令,透過:/?:!可以進入命令模式,分別對應的是:執行內部命令、向上或向下搜尋、執行外部命令。

vim日常操作

以下描述,預設情況都是在普通模式下的鍵入。

只描述本人日常使用的,一切少用和不常見的可以參考上圖或百度。

游標移動

上下左右:

普通模式和可視模式下,使用h(←)、j(↓)、k(↑)、i(→)實現。

如果需要在插入模式下實現游標移動,可以在vimrc檔案配置上新增以下配置熱鍵對映(入門的同學忽略這個)

  • 個人習慣鍵盤預設的上下左右鍵。

單詞方式移動游標(不區分大小寫):

  • b/B:前一個單詞詞首。
  • e/E:下一個單詞詞尾。
  • w/W:下一個單詞詞首。

行指定字元:

  • fx:搜尋游標後字元x並跳轉。
  • Fx:搜尋游標前字元x並跳轉。

行首行尾:

  • homeend鍵:行首尾。雖然不屬於vim範疇,但是作者也經常使用。特別是搭配shift鍵用來選中文字。
  • ^$,也是行首尾。
  • |(是shift+\得出的,不是英文字母I):行首。

句和段:

  • ():上一句和下一句。
  • {}:上一段和下一段。

檔案某個位置:

  • gg:檔案頭。
  • G:檔案末。
  • ngg:跳轉到第n行,n為數字。

跳到函式首尾:

[]都是以每個函式的首尾括號為基準。

相同方向跳到函式左括號(開頭)。

相反方向跳到函式右括號(尾部)。

第一個方向決定前後,第二個方向決定首尾。

前面還可以新增數字n,表示n個。

n不填時預設為1。

n[[:前n個 前:(

n[]:前n個 後:)

n]]:後n個 前:(

n][:後n個 後:)

ctrl+T:回到上一個游標位置。

螢幕移動

主要是瀏覽程式碼時使用。

翻頁:

  • ctrl+b:上一頁。(Backward)
  • ctrl+f:下一頁。(Forward)
  • ctrl+u:上半一頁。(up)
  • ctrl+d:下半一頁。(down)

當前屏游標位置:

  • H:當前屏頂。(High)
  • M:當前屏中。(Middle)
  • L:當前屏底。(Low)

游標滾屏:

  • zt:游標程式碼滾到屏頂。(top)
  • zz:游標程式碼滾到屏中。
  • zb:游標程式碼滾到屏底。
  • ctrl+e:前滾一行。
  • ctrl+y:後滾一行。

文字修改

進入插入模式:

  • i:在游標所在位置插入。
  • I:在行首插入。
  • a:在在游標後插入。
  • A:在行尾插入。
  • o:在游標所在位置的下一行插入。
  • O:在游標所在位置的上一行插入。

刪除:

x:刪除字元。

  • x:刪除當前字元。
  • nx:刪除包括當前字元後的n個字元。
  • X:刪除游標前一個字元。
  • nX:刪除當前游標前的n個字元。

d:需要配合使用。

  • dd:刪除整行。

  • ndd:刪除n行。

  • 因為d是刪除操作,需要搭配其它鍵使用,其刪除就是刪除到後面鍵入命令後游標的位置如:

    • dfx:從游標起刪除到本行後面第一個字元x的位置。
    • diw:刪除游標所在單詞。
    • 還有dwdbd end鍵等等都可以自由發揮。

dix和dax的使用,是刪除x內部和刪除包括x的內部:

  • di}:就是刪除游標所在的{}內部所有內容。
  • da}:相對di}da}{}也刪除。
  • 其x可以搭配:wsp"}]等等輔助字元,實際用到時再瞭解。

dw刪除一個單詞示例:

di)刪除()內容示例:

df(刪除到( :

複製貼上

y:複製。

  • 搭配v鍵入可視模式後選中文字,鍵入y就是複製選中的文字了。
  • yy:複製當前行。
  • nyy:當前行起,複製n行。
  • y搭配貫標移動指令進行復制。
  • y搭配wsp"}]等等輔助字元使用。
  • 注意:前面的刪除是刪除後帶賦值作用的。

p:貼上。

yi{複製p貼上{}內容示例:

撤銷:

  • u:撤銷上一個操作。

vim可視模式

v

v:進入可視模式。即是選中文字。

搭配游標移動使用,這個比較簡單。

高階點的就是搭配wsp"}]等等輔助字元使用。

再搭配yd這些指令使用。實現複製、刪除功能。

ctrl+v

  • ctrl+v:進入可視模式
  • ctrl+v+%:選中大括號
  • ctrl+v+I:行列插入

配合游標移動相關命令使用。如在多行尾部修改:

重複技巧

Vim 對很多簡單操作已經定義了重複鍵:

  • ;:重複最近的字元查詢(f、t等)操作。
  • ,:重複最近的字元查詢操作,反方向。
  • n:重複最近的字串查詢操作(/和?)。(vscode中直接/進入命令搜尋字串)
  • N:重複最近的字串查詢操作(/和?),反方向。(vscode中直接/進入命令搜尋字串)
  • .:重複執行最近的修改操作。

多視窗

多個視窗操作同一個檔案。

:sp:水平分屏。(split)

:vs:垂直分屏。(vsplit)

注意,部分功能渲染在vscode可能失效,練習的同學轉linux下的vim。

操作下面處理前先鍵入ctrl+w

主要:

  • 加方向鍵(h、j、k、l、等等)可以在視窗之間跳轉
  • w:跳轉到下一個(往右和往下)視窗,如果已經是右下角的視窗,則跳轉到左上角的視窗
  • W:跳轉到上一個(往左和往上)視窗,如果已經是左上角的視窗,則跳轉到右下角的視窗
  • n:new:開啟一個新視窗
  • c:close:關閉當前視窗;當前視窗如果已經是最後一個則無效
  • q:quit:退出當前視窗,當最後一個視窗退出時則退出 Vim
  • o:only:只保留當前視窗,關閉其他所有視窗
  • s:split:作用相同,把當前視窗橫向一分為二
  • v:vsplit:作用相同,把當前視窗縱向一分為二
  • =:使得所有視窗大小相同(當調整過終端或圖形介面 Vim 的視窗大小後特別有用)

瞭解:

  • _:設定視窗高度,命令前的數字表示高度行數,預設為縱向佔滿(想專心編輯某個檔案時很有用)
  • |:設定視窗寬度,命令前的數字表示寬度列數,預設為橫向佔滿
  • +:增加視窗的高度,命令前的數字表示需要增加的行數,預設為 1
  • -:減少視窗的高度,命令前的數字表示需要減少的行數,預設為 1
  • >:增加視窗的寬度,命令前的數字表示需要增加的列數,預設為 1
  • <lt>(提醒,我們用表示“<”鍵)減少視窗的寬度,命令前的數字表示需要增加的列數,預設為 1。

簡單示例:

更便捷

自己定製鍵入。