vim memo
目錄
我在幾年前上過 91 的極速開發後,已經習慣在日常的文字編輯工具以及開發工具中啟用 vim 來進行文字編輯,這邊我將先前整理的一些資料整理出來以方便查閱。
詳細內容以及我自己使用的 vimrc 檔案後續會再安排公開,目前先讓我繼續鎖在私有git 裡面吧
此篇筆記為基礎 vim 命令,可搭配各 IDE 的 vim 套件來在 IDE 中開啟 vim 命令的支援。
1 很重要
若有需要可關注 91 的 FB 以取得最新資訊
2 擺在前面的參考文件
- Vim 指令中文說明 此網站內容完整,有許多在本文件沒有寫的額外命令 (主因是我比較少用),若有興趣可參閱
- 成大資工wiki
- VIM-keyboard-shortcuts
- Vim help
3 各 IDE 套件
4 Vim 功能指令
指令 | 作用 | 備註 |
---|---|---|
: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 | 關閉目前開啟分頁以外的其他分頁 |
5 模式代號
- N = normal
- I = Insert
- V = Visual
- G = Global (N/I/V 皆作用)
6 字詞定義
- n mode = 標準模式 (Normal Mode)
- i mode = 輸入模式 (Insert Mode)
- v mode = 選擇模式 (Visual Mode)
7 Vim 基本按鍵
命令對應英文輸入法的輸入方式,例如命令 i = 直接輸入 i,命令 I = Shift+i
模式 | 命令 | 作用 | 備註 | 常用項標記 |
---|---|---|---|---|
N/V | h | 方向鍵 左 | * | |
N/V | j | 方向鍵 下 | * | |
N/V | k | 方向鍵 上 | * | |
N/V | l | 方向鍵 右 | * | |
N | i | 在目前游標位置的前方進入 i mode | * | |
N | I | 在目前游標位置的行首進入 i mode | ||
N | a | 在目前游標位置的後方進入 i mode | * | |
N | A | 在目前游標位置的行尾進入 i mode | ||
N | v | 選擇文字 (會進入 v mode) | ||
N | V | 選擇一行 (會進入 v mode) | * | |
V | o | 在選取字節的頭、尾切換 | 僅在選取單一字節時適用 | |
V | O | 在選取字節的頭、尾切換 | 僅在選取單一字節時適用 | |
N | o | 在下一行新增一行並進入 i mode | * | |
N | O | 在上一行新增一行並進入 i mode | * | |
N/V | ~ | 所選文字的字母大小寫轉換 | ||
N/V | s | 移除游標位置 (選取文字) 後進入 i mode | * | |
N | S | 清除游標所在行所有內容,並進入 i mode | * | |
N | f | 往後搜尋一個字母 | ||
N | F | 往前搜尋一個字母 | ||
N | / | 往後搜尋一組文字 | * | |
N | ? | 往前搜尋一組文字 | * | |
N | J | 將下一行與目前行合併 | * | |
N | $ | 將游標移動到行尾 | ||
N | . | 重複執行上一次 “進入 Insert Mode” 的指令 & 在 Insert Mode 輸入的內容若是選取文字後再用 s 這一類指令進入輸入模式,會連選取幾個文字這一件事情都重複執行 | * | |
N | n | 重複前一次的 /?fF 等搜尋命令 | * | |
N | N | 重複前一次的 /?fF 等搜尋命令 (反向執行) | * | |
N | e | 游標移動到單字結尾 | * | |
N | E | 游標移動到單字結尾後的一個標點符號 | ||
N | w | 游標移動到下一個單字的字首 | * | |
N | W | 游標移動到下一個字段的字首 (僅認換行符號或者空白) | ||
N | b | 游標移動到上一個單字的字首 | * | |
N | B | 游標移動到上一個字段的字首 (僅認換行符號或者空白) | ||
V | d | 刪除所選項目 (功能跟 v mode 下的 x 一樣,但是會等待使用者輸入組合命令,例如 d3l = 往右刪除 3 個字元,但是使用 x 命令時會直接執行命令) | * | |
N | D | 直接從目前游標位置刪除到行尾 | ||
N | C | 直接從目前游標位置刪除到行尾,並進入輸入模式 | ||
N | x | 剪下游標目前所在字元 | ||
N | X | 剪下游標目前所在的前一個字元 | ||
V | x | 剪下已選取字元 | ||
V | X | 剪下已選取字元的所在行整行 | ||
N | p | 在游標目前所在字元後方貼上(插入)用 y 指令複製的資料 | 不與系統剪貼簿共用複製資料 | |
N | P | 在游標目前所在字元前方貼上(插入)用 y 指令複製的資料 | 不與系統剪貼簿共用複製資料 | |
V | p | 用複製的內容覆蓋掉選取的內容 (與系統選取後貼上效果相同) |
8 vim 組合命令
8.1 Normal Mode 的組合命令起始鍵
組合 | 說明 |
---|---|
v + 命令 | 進入 Visual Mode 然後執行命令 |
c + 命令 | 剪下符合命令範圍的文字,執行完畢後會進入 Insert Mode |
y + 命令 | 複製符合命令範圍的文字 (如果是跳躍游標的命令,則會從目前位置刪到游標到達的位置) |
d + 命令 | 刪除符合命令範圍的文字 (如果是跳躍游標的命令,則會從目前位置刪到游標到達的位置) |
gu + 命令 | 變更 命令移動軌跡 / 會被命令標記 中的英文字母都變更為小寫 |
gU + 命令 | 變更 命令移動軌跡 / 會被命令標記 中的英文字母都變更為大寫 |
- 命令可以是
- 選取命令 (下一節內容)
- 游標移動命令 (j, w, b, 3j, ]} ..etc)
- 行移動 (j,k) 的命令會以 行 為單位執行
- 剪下、複製、刪除都會把文字移動到 vim 的預設剪貼簿
8.2 選取命令
基本命令可在 Visual Mode 中直接作用,主要為 2 字元命令,組合為 [選取範圍][環繞符號]
8.2.1 選取範圍
字元 | 功能 |
---|---|
i | 不包含環繞符號 |
a | 包含環繞符號 |
8.2.2 環繞符號
環繞符號 | 命令字 | 備註 |
---|---|---|
小括號 () | b ,( ,) | |
中括號 [] | [ ,] | |
大括號 {} | B ,{ ,} | |
xml 標籤 <OOO></OOO> | t | |
雙引號 "" | " | a" 這組命令在已選取多個字元時會無作用 |
單引號 '' | ' | |
空行 | p (小寫) | ip 會選擇兩個空白行之間的行,a 則是包含前方空白行 (後方空白行的部分應只包含段行符號) |
任意符號 | w (小寫) | 選取任意符號間的文字,只要前後的字元都屬於符號即可 |
特定符號 | W | 此命令只認 空白、換行、)、]、}(、[、{ 這三個符號比較特別,需要前方為空白時才會被視為可作用的符號 |
8.2.3 常用的組合命令表 (VIM 原生)
模式 | 命令 | 作用 | 備註 |
---|---|---|---|
N | ciw | 移除目前所在單字/字段後進入 i mode | |
N | cw | 往後移除文字後進入 i mode (會停在 w 命令會到達的位置,大寫 W 亦同) | |
N | cb | 往前移除文字後進入 i mode (會停在 b 命令會到達的位置,大寫 B 亦同) | |
N | diw | 移除目前所在單字/字段 | |
N | dw | 往後移除文字 (會停在 w 命令會到達的位置,大寫 W 亦同) | |
N | db | 往後移除文字 (會停在 b 命令會到達的位置,大寫 B 亦同) | |
N | dd | 刪除行 | |
N | cc | 刪除行,並進入輸入模式 | |
N | viw | 選擇一個單字 (但是我更喜歡 Ctrl + D 的選取快捷鍵) | |
N | vi( / vi) | 選擇 () 內的單字,() 可替換為 {} / [] / " 等 | |
N | va( / va) | 選擇 () 內包含()的單字,() 可替換為 {} / [] / " 等 | |
N | di( / di) | 刪除 () 內的單字,() 可替換為 {} / [] / " 等 | |
N | da( / da) | 刪除 () 內包含()的單字,() 可替換為 {} / [] / " 等 | |
N | zb | 移動游標目前位置到螢幕最下方 | |
N | zt | 移動游標目前位置到螢幕最上方 | |
N | ZZ | 儲存並關閉目前檔案 | |
N | ZQ | 關閉目前檔案 (不儲存) |
自訂命令
1 注意事項
- 在 Vimrc 檔案中,特定鍵位的代碼個別如下
- Vim 命令
<CR>
= 鍵盤的<Enter>
- Vim 命令
<A>
= 鍵盤的<Alt>
此設定在 VSCode 中無效 - Vim 命令
<C>
= 鍵盤的<Ctrl>
- Vim 命令
<BS>
= 鍵盤的<BackSpace>
- Vim 命令
2 常見的自訂命令
模式 | 命令 | 作用 | Vimrc 中設定的 Vim 行為 |
---|---|---|---|
I | jj | 由 insert mode 轉回 normal mode | <Esc> |
N | hh | 模擬 home 鍵功能 | ^ |
N | ll | 模擬 end 鍵功能 | $ |