> For the complete documentation index, see [llms.txt](https://kanneg881.gitbook.io/workspace/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kanneg881.gitbook.io/workspace/vim/pu-tong-mo-shi-zhi-ling.md).

# 普通模式指令

## 修改文字

`~`\
切換大小寫

`J`\
連接 `[count]` 行，但至少包含兩行

`{Visual}J`\
連接高亮行，但至少包含兩行

`x`\
刪除游標下的字元

`r{char}`\
`gr{char}`\
以上兩個指令皆是替換一個字元

`d{motion}`\
刪除

`dd`\
從游標處刪除到此行結尾

`D`\
同上

`y{motion}`\
複製

`[count]["x]p`\
貼上複製的內容 \[從暫存器 x] 在游標之後 \[count] 次

`[count]["x]P`\
貼上複製的內容 \[從暫存器 x] 在游標之前 \[count] 次

`[count]u`\
撤銷 `[count]` 次更改

`[count]<Ctrl-r>`\
重做 `[count]` 次被撤銷的更改

`gu{motion}`\
使 `{motion}` 跨越的文本成為小寫

`gU{motion}`\
使 `{motion}` 跨越的文本成為大寫

`g~{motion}`\
切換 `{motion}` 跨越的文本的大小寫

`>{motion}`\
將 `{motion}` 跨越的行右移 shiftwidth 列\
在可視模式中按 `>` 即右移 shiftwidth 列

`<{motion}`\
將 `{motion}` 跨越的行左移 shiftwidth 列\
在可視模式中按 `<` 即右移 shiftwidth 列

`={motion}`\
自動縮進

`[count]<Ctrl-a>`\
從游標開始往後找的第一個數字加 count

`[count]<Ctrl-x>`\
從游標開始往後找的第一個數字減 count

## 切換模式

`:`\
切換Ex命令模式

`/`\
切換搜尋模式，正向查找

`?`\
切換搜尋模式，反向查找

`A`\
移動到最右側切換插入模式

`C`\
相當於 `c$`

`I`\
移動到最左側切換插入模式

`O`\
往上插入一行，相當於 `ko`

`R`\
切換成替換模式\
將游標位子的字元替換成輸入的字元\
再移動到下一個字元

`S`\
從最左側非空白的位置刪除到結尾\
相當於 `^C`

`V`\
切換可視模式，以行為單位

`a`\
移動到游標右側切換插入模式

`c{motion}` \
將 `{motion}` 刪除並進入插入模式

`cc`\
從最左側非空白的位置刪除到結尾\
相當於 `^C`

`gR`\
切換虛擬替換模式\
詳情請參考 `:help vreplace-mode`

`gh`\
切換選擇模式

`gv`\
切換可視模式，並選取上次可視模式選取的內容

`i`\
移動到游標左側切換插入模式

`o`\
往下插入一行，相當於 `A<CR>`

`o`\
在可視模式輸入會移動高亮區的游標

`q/`\
打開命令行窗口

`[count]s`\
刪除 count 個字元並切換到插入模式

`v`\
切換可視模式，以字元為單位

`<Ctrl-[>`\
同 `<Esc>`

`<Ctrl-g>`\
在可視模式輸入會切換成選成模式

`<Ctrl-v>`\
切換區塊的可視模式

`<Esc>`\
離開其他模式到普通模式

## 縮進

`za` 切換縮進\
`zc` 關閉縮進\
`zo` 打開縮進\
`zr` 所有文件打開一層縮進\
`zm` 所有文件關閉一層縮進\
`zR` 打開所有縮進\
`zM` 關閉所有縮進\
`zn` 關閉縮進功能\
`zN` 啟動縮進功能\
`zi` 切換縮進功能（啟動和關閉）

`zf{motion} 或 {Visual}zf`\
創建折疊操作符

`zd` 刪除在光標下的折疊

## 暫存器

`"{register}[motion]`\
對暫存器做對應的動作\
a-z {register} 可以自己使用

`"{register}y[motion]`\
覆寫或附加暫存器的內容\
a-z {register} 會覆寫暫存器的內容\
A-Z {register} 會附加暫存器的內容

### 特殊暫存器

| 暫存器  | 用途                                                       |
| ---- | -------------------------------------------------------- |
| `"_` | 當寫到這個寄存器時，什麼都不會發生。這可以用來刪除文本，而不影響任何正常的寄存器。從該寄存器讀時，什麼都不會返回 |
| `"+` | CLIPBOARD (用於剪下、複製和貼上操作)                                 |
| `"*` | PRIMARY (用於代表當前的可視選擇內容，就像 Vim 的可視模式的操作對象)                |
| `".` | 包含最近插入的文本                                                |
| `"%` | 包含當前文件名                                                  |
| `":` | 包含最近執行過的命令行                                              |
| `"#` | 包含當前視窗輪換文件的名字                                            |
| `"=` | 表達式暫存器                                                   |
| `"/` | 含有最近搜索的模式                                                |
| `"N` | <p>最後10次刪除操作的歷史紀錄<br>0為上一次，1為上上一次</p>                    |

## 打開命令行窗口

| 命令         | 動作               |
| ---------- | ---------------- |
| `q/`       | 打開查找命令歷史的命令行窗口   |
| `q:`       | 打開 Ex 命令歷史的命令行窗口 |
| `<Ctrl-f>` | 從命令行模式切換到命令行窗口   |

## 宏

`q{0-9a-zA-Z"}`\
在暫存器 `{0-9a-zA-Z"}` 裡錄製鍵入的字元（大寫名字的暫存器表示附加鍵入的內容），結束錄製再按一次 `q`

`[count]@{0-9a-z".=*+}`\
執行暫存器 `{0-9a-z".=*+}` 的內容 `[count]` 次

`@:`\
重複上次的Ex指令

`@@`\
重複上次的@暫存器指令

## 其他

`.`\
重複普通模式指令

`<Ctrl-l>`\
清除視窗並重新畫視窗

`ga`\
顯示游標上的字元編碼

`ZZ`\
儲存並退出
