vim memo

我在幾年前上過 91 的極速開發後,已經習慣在日常的文字編輯工具以及開發工具中啟用 vim 來進行文字編輯,這邊我將先前整理的一些資料整理出來以方便查閱。

詳細內容以及我自己使用的 vimrc 檔案後續會再安排公開,目前先讓我繼續鎖在私有git 裡面吧

此篇筆記為基礎 vim 命令,可搭配各 IDE 的 vim 套件來在 IDE 中開啟 vim 命令的支援。

若有需要可關注 91 的 FB 以取得最新資訊

指令作用備註
:source [vimrc file path]重新讀取 vimrc 設定檔,檔案位置可用 ~/ 來代表使用者資料夾
:set rnu設定左側行數顯示區以相對行數顯示
:wq儲存並關閉目前檔案在使用命令列進入 Linux 並操作 Vim 時會需要
:x儲存並關閉目前檔案在使用命令列進入 Linux 並操作 Vim 時會需要
:w儲存目前檔案在使用命令列進入 Linux 並操作 Vim 時會需要
:q!關閉目前檔案 (不儲存)在使用命令列進入 Linux 並操作 Vim 時會需要
:wqa儲存並關閉所有檔案
:noh移除使用 / 查詢後留下的標記 (Linux 上的 VIM 會發生此狀況)
:only關閉所有浮動視窗,僅保留編輯器區塊 (vscode 有效,rider 無效)
:tabonly關閉目前開啟分頁以外的其他分頁
  • N = normal
  • I = Insert
  • V = Visual
  • G = Global (N/I/V 皆作用)
  • n mode = 標準模式 (Normal Mode)
  • i mode = 輸入模式 (Insert Mode)
  • v mode = 選擇模式 (Visual Mode)

命令對應英文輸入法的輸入方式,例如命令 i = 直接輸入 i,命令 I = Shift+i

模式命令作用備註常用項標記
N/Vh方向鍵 *
N/Vj方向鍵 *
N/Vk方向鍵 *
N/Vl方向鍵 *
Ni在目前游標位置的前方進入 i mode*
NI在目前游標位置的行首進入 i mode
Na在目前游標位置的後方進入 i mode*
NA在目前游標位置的行尾進入 i mode
Nv選擇文字 (會進入 v mode)
NV選擇一行 (會進入 v mode)*
Vo在選取字節的頭、尾切換僅在選取單一字節時適用
VO在選取字節的頭、尾切換僅在選取單一字節時適用
No在下一行新增一行並進入 i mode*
NO在上一行新增一行並進入 i mode*
N/V~所選文字的字母大小寫轉換
N/Vs移除游標位置 (選取文字) 後進入 i mode*
NS清除游標所在行所有內容,並進入 i mode*
Nf往後搜尋一個字母
NF往前搜尋一個字母
N/往後搜尋一組文字*
N?往前搜尋一組文字*
NJ將下一行與目前行合併*
N$將游標移動到行尾
N.重複執行上一次 “進入 Insert Mode” 的指令 & 在 Insert Mode 輸入的內容
若是選取文字後再用 s 這一類指令進入輸入模式,會連選取幾個文字這一件事情都重複執行
*
Nn重複前一次的 /?fF 等搜尋命令*
NN重複前一次的 /?fF 等搜尋命令 (反向執行)*
Ne游標移動到單字結尾*
NE游標移動到單字結尾後的一個標點符號
Nw游標移動到下一個單字的字首*
NW游標移動到下一個字段的字首 (僅認換行符號或者空白)
Nb游標移動到上一個單字的字首*
NB游標移動到上一個字段的字首 (僅認換行符號或者空白)
Vd刪除所選項目 (功能跟 v mode 下的 x 一樣,但是會等待使用者輸入組合命令,例如 d3l = 往右刪除 3 個字元,但是使用 x 命令時會直接執行命令)*
ND直接從目前游標位置刪除到行尾
NC直接從目前游標位置刪除到行尾,並進入輸入模式
Nx剪下游標目前所在字元
NX剪下游標目前所在的前一個字元
Vx剪下已選取字元
VX剪下已選取字元的所在行整行
Np在游標目前所在字元後方貼上(插入)用 y 指令複製的資料不與系統剪貼簿共用複製資料
NP在游標目前所在字元前方貼上(插入)用 y 指令複製的資料不與系統剪貼簿共用複製資料
Vp用複製的內容覆蓋掉選取的內容 (與系統選取後貼上效果相同)
組合說明
v + 命令進入 Visual Mode 然後執行命令
c + 命令剪下符合命令範圍的文字,執行完畢後會進入 Insert Mode
y + 命令複製符合命令範圍的文字 (如果是跳躍游標的命令,則會從目前位置刪到游標到達的位置)
d + 命令刪除符合命令範圍的文字 (如果是跳躍游標的命令,則會從目前位置刪到游標到達的位置)
gu + 命令變更 命令移動軌跡 / 會被命令標記 中的英文字母都變更為小寫
gU + 命令變更 命令移動軌跡 / 會被命令標記 中的英文字母都變更為大寫
  • 命令可以是
    • 選取命令 (下一節內容)
    • 游標移動命令 (j, w, b, 3j, ]} ..etc)
      • 行移動 (j,k) 的命令會以 行 為單位執行
  • 剪下、複製、刪除都會把文字移動到 vim 的預設剪貼簿

基本命令可在 Visual Mode 中直接作用,主要為 2 字元命令,組合為 [選取範圍][環繞符號]

字元功能
i不包含環繞符號
a包含環繞符號
環繞符號命令字備註
小括號 ()b,(,)
中括號 [][,]
大括號 {}B,{,}
xml 標籤 <OOO></OOO>t
雙引號 """a" 這組命令在已選取多個字元時會無作用
單引號 '''
空行p (小寫)ip 會選擇兩個空白行之間的行,a 則是包含前方空白行 (後方空白行的部分應只包含段行符號)
任意符號w (小寫)選取任意符號間的文字,只要前後的字元都屬於符號即可
特定符號W此命令只認 空白、換行、)、]、}
(、[、{ 這三個符號比較特別,需要前方為空白時才會被視為可作用的符號
模式命令作用備註
Nciw移除目前所在單字/字段後進入 i mode
Ncw往後移除文字後進入 i mode (會停在 w 命令會到達的位置,大寫 W 亦同)
Ncb往前移除文字後進入 i mode (會停在 b 命令會到達的位置,大寫 B 亦同)
Ndiw移除目前所在單字/字段
Ndw往後移除文字 (會停在 w 命令會到達的位置,大寫 W 亦同)
Ndb往後移除文字 (會停在 b 命令會到達的位置,大寫 B 亦同)
Ndd刪除行
Ncc刪除行,並進入輸入模式
Nviw選擇一個單字 (但是我更喜歡 Ctrl + D 的選取快捷鍵)
Nvi( / vi)選擇 () 內的單字,() 可替換為 {} / [] / " 等
Nva( / va)選擇 () 內包含()的單字,() 可替換為 {} / [] / " 等
Ndi( / di)刪除 () 內的單字,() 可替換為 {} / [] / " 等
Nda( / da)刪除 () 內包含()的單字,() 可替換為 {} / [] / " 等
Nzb移動游標目前位置到螢幕最下方
Nzt移動游標目前位置到螢幕最上方
NZZ儲存並關閉目前檔案
NZQ關閉目前檔案 (不儲存)

自訂命令

  1. 在 Vimrc 檔案中,特定鍵位的代碼個別如下
    • Vim 命令 <CR> = 鍵盤的 <Enter>
    • Vim 命令 <A> = 鍵盤的 <Alt> 此設定在 VSCode 中無效
    • Vim 命令 <C> = 鍵盤的 <Ctrl>
    • Vim 命令 <BS> = 鍵盤的 <BackSpace>
模式命令作用Vimrc 中設定的 Vim 行為
Ijj由 insert mode 轉回 normal mode<Esc>
Nhh模擬 home 鍵功能^
Nll模擬 end 鍵功能$

相關內容