# Vim相关命令

## 基本移动命令

| 命令     | 描述                             |
| -------- | -------------------------------- |
| `h`      | 向左移动                         |
| `j`      | 向下移动                         |
| `k`      | 向上移动                         |
| `l`      | 向右移动                         |
| `w`      | 移动到下一个单词开头             |
| `W`      | 移动到下一个单词开头（忽略符号） |
| `b`      | 移动到上一个单词开头             |
| `B`      | 移动到上一个单词开头（忽略符号） |
| `e`      | 移动到当前单词末尾               |
| `E`      | 移动到当前单词末尾（忽略符号）   |
| `0`      | 移动到行首                       |
| `^`      | 移动到行首第一个非空白字符       |
| `$`      | 移动到行尾                       |
| `gg`     | 移动到文件开头                   |
| `G`      | 移动到文件末尾                   |
| `:[n]`   | 移动到第 n 行                    |
| `Ctrl+f` | 向下翻页                         |
| `Ctrl+b` | 向上翻页                         |
| `H`      | 移动到屏幕顶部                   |
| `M`      | 移动到屏幕中间                   |
| `L`      | 移动到屏幕底部                   |

---

## 插入模式

| 命令     | 描述                       |
| -------- | -------------------------- |
| `i`      | 在光标前插入               |
| `a`      | 在光标后插入               |
| `I`      | 在行首插入                 |
| `A`      | 在行尾插入                 |
| `o`      | 在当前行下方新建一行并插入 |
| `O`      | 在当前行上方新建一行并插入 |
| `R`      | 进入替换模式（覆盖字符）   |
| `Ctrl+h` | 删除前一个字符（退格键）   |
| `Ctrl+w` | 删除前一个单词             |
| `Ctrl+u` | 删除到行首                 |

---

## 编辑命令

| 命令     | 描述                 |
| -------- | -------------------- |
| `x`      | 删除当前字符         |
| `X`      | 删除前一个字符       |
| `dd`     | 删除当前行           |
| `dw`     | 删除到下一个单词开头 |
| `db`     | 删除到上一个单词开头 |
| `d$`     | 删除到行尾           |
| `d^`     | 删除到行首           |
| `dG`     | 删除到文件末尾       |
| `dgg`    | 删除到文件开头       |
| `yy`     | 复制当前行           |
| `yw`     | 复制到下一个单词开头 |
| `y$`     | 复制到行尾           |
| `p`      | 粘贴到光标后         |
| `P`      | 粘贴到光标前         |
| `u`      | 撤销                 |
| `Ctrl+r` | 重做                 |
| `.`      | 重复上一次修改       |
| `J`      | 合并下一行到当前行   |
| `>>`     | 向右缩进             |
| `<<`     | 向左缩进             |
| `==`     | 自动缩进当前行       |

---

## 搜索与替换

| 命令             | 描述                     |
| ---------------- | ------------------------ |
| `/pattern`       | 向前搜索 pattern         |
| `?pattern`       | 向后搜索 pattern         |
| `n`              | 下一个匹配项             |
| `N`              | 上一个匹配项             |
| `:%s/old/new/g`  | 全局替换 old 为 new      |
| `:%s/old/new/gc` | 全局替换，每次确认       |
| `:s/old/new/g`   | 当前行替换               |
| `*`              | 向前搜索当前光标下的单词 |
| `#`              | 向后搜索当前光标下的单词 |
| `:noh`           | 临时取消搜索高亮         |

---

## 可视模式（选择文本）

| 命令             | 描述                           |
| ---------------- | ------------------------------ |
| `v`              | 进入字符可视模式（按字符选择） |
| `V`              | 进入行可视模式（按行选择）     |
| `Ctrl+v`         | 进入块可视模式（矩形选择）     |
| `ggVG` 或 `ggvG` | **全选**整个文件               |
| `o`              | 切换选择的光标端               |
| `y`              | 复制选中内容                   |
| `d`              | 删除（剪切）选中内容           |
| `c`              | 修改（删除并进入插入模式）     |
| `~`              | 切换选中内容的大小写           |

---

## 窗口管理

| 命令          | 描述           |
| ------------- | -------------- |
| `:sp [file]`  | 水平分割窗口   |
| `:vsp [file]` | 垂直分割窗口   |
| `Ctrl+w h`    | 移动到左侧窗口 |
| `Ctrl+w j`    | 移动到下方窗口 |
| `Ctrl+w k`    | 移动到上方窗口 |
| `Ctrl+w l`    | 移动到右侧窗口 |
| `Ctrl+w w`    | 循环切换窗口   |
| `Ctrl+w c`    | 关闭当前窗口   |
| `Ctrl+w o`    | 只保留当前窗口 |
| `Ctrl+w +`    | 增加窗口高度   |
| `Ctrl+w -`    | 减少窗口高度   |
| `Ctrl+w >`    | 增加窗口宽度   |
| `Ctrl+w <`    | 减少窗口宽度   |
| `Ctrl+w =`    | 均衡窗口尺寸   |

---

## 标签页

| 命令             | 描述                  |
| ---------------- | --------------------- |
| `:tabnew [file]` | 新建标签页            |
| `gt`             | 下一个标签页          |
| `gT`             | 上一个标签页          |
| `:tabclose`      | 关闭当前标签页        |
| `:tabonly`       | 关闭其他标签页        |
| `:tabmove [n]`   | 移动标签页到第 n 位置 |

---

## 文件操作

| 命令           | 描述                       |
| -------------- | -------------------------- |
| `:e file`      | 打开文件                   |
| `:w`           | 保存文件                   |
| `:w file`      | 另存为 file                |
| `:q`           | 退出                       |
| `:q!`          | 强制退出不保存             |
| `:wq`          | 保存并退出                 |
| `:x`           | 保存并退出（仅当有修改时） |
| `:saveas file` | 另存为 file                |
| `:r file`      | 插入文件内容到当前位置     |
| `:r !command`  | 插入命令输出到当前位置     |

---

## 其他实用命令

| 命令              | 描述                                    |
| ----------------- | --------------------------------------- |
| `:set nu`         | 显示行号                                |
| `:set nonu`       | 隐藏行号                                |
| `:set hlsearch`   | 高亮搜索结果                            |
| `:set nohlsearch` | 取消高亮搜索结果                        |
| `:set paste`      | 进入粘贴模式（防止自动缩进）            |
| `:set nopaste`    | 退出粘贴模式                            |
| `:!command`       | 执行外部命令                            |
| `:help`           | 打开帮助文档                            |
| `Ctrl+g`          | 显示当前文件信息                        |
| `:%!command`      | 用命令处理整个文件（如 `:%!sort` 排序） |
