Vim 快捷键 - 高效入门
2024年8月9日大约 11 分钟
Vim 快捷键 - 高效入门

Vim设计理念
Vim 的核心设计理念是 Operator + Motion 的模式 - 可以参考这种方式快速记忆命令
例:
di{、da{、ci"、ca"等都是
模式切换
- Esc — normal常规模式
- i — insert插入模式
- v — visual可视模式
- Ctrl + v — visual block可视块模式
- : — command命令模式
- r — replace替换模式
Normal Mode - 普通模式
1.通用操作
| 快捷键 | 描述 | 意义 |
|---|---|---|
| . | 重复前次操作 - 编辑操作 | |
| u | 撤销前次操作 | u - undo |
| ctrl + r | 恢复前次操作 | |
| ; | 重复前次搜索操作 - 查找命令(f、F、t、T) | |
| , | 重复前次搜索操作 - 反向查找 - 查找命令(f、F、t、T) | 逗号 |
2.光标移动
2.1 基本移动
| 快捷键 | 描述 | 意义 |
|---|---|---|
| h / j / k / l | 向 左 / 下 / 上 / 右 移动 | |
| 行移动 | ||
| 0 | 跳转至 行头 | |
| $ | 跳转至 行尾 | |
| ^ | 跳转至 行头,智能忽略空格 | |
| g_ | 跳转至 行尾,智能忽略空格 | |
| % | 就近原则 跳转到 匹配的括号 | ()[ ] { } |
| word移动 | 大写操作范围更大 | |
| w | 下一个单词【首部】 | |
| e | 下一个单词【尾部】 | |
| b | 上一个单词【首部】 | |
| W | 下一个单词【首部】,忽略标点符号,空格除外 | |
| E | 下一个单词【尾部】,忽略标点符号,空格除外 | |
| B | 上一个单词【首部】,忽略标点符号,空格除外 | |
| ge | 上一个单词【尾部】 | |
| gE | 上一个单词【尾部】,忽略标点符号,空格除外 | |
| 句子和段落移动 | ||
| ( / ) | 前移1句 / 后移1句 | sentences |
| { / } | 前移1段 / 后移1段 | paragraphs |
| 文档移动 | ||
| gg / G | 调整至【文档】第一行 / 到最后一行 | g - game over |
| 查找移动 | ||
f{char} | 光标跳到下一个{char}所在的位置 | |
F{char} | 光标反向跳到上一个{char}所在的位置 | |
t{char} | 光标跳到下个{char}的前一个字符的位置 | |
T{char} | 光标反向移动到上个{char}的后一个字符的位置 | |
| ; | 重复上次的字符查找命令 | |
| , | 反向查找上次的查找命令 | |
| 其它移动 | ||
| H / M / L | H — 跳转至当前页第一行 M — 跳转至当前页中间行 L— 跳转至当前页最后一行 | H – High M – Middle L – Last |
| gk | 向上移动一行,适用于一行文本出现换行(wrap)时 | |
| gj | 向下移动一行,适用于一行文本出现换行(wrap)时 |
2.2 翻屏
| 快捷键 | 描述 | 意义 |
|---|---|---|
| Ctrl + f / Ctrl + b | 下翻一屏 / 上翻一屏 | f – forword b - back |
| Ctrl + d / Ctrl + u | 下翻半屏 / 上翻半屏 | d - down u - up |
| Ctrl + e / Ctrl + y | 向下滚动一行 / 向上滚动一行 | |
| n% | 到文件n%的位置 | |
| zz | 将当前行移动到屏幕中央 | |
| zt | 将当前行移动到屏幕顶端 | t - top |
| zb | 将当前行移动到屏幕底端 | b - back |
| zs | 光标所在列移动到窗口最左侧 | |
| ze | 光标所在列移动到窗口最右侧 |
2.3 精准定位 - 插件实现
- 参考vim-easymotion 插件
- 参考vim-sneak 插件
| 快捷键 | 描述 |
|---|---|
| vim-easymotion | |
| <Leader><Leader>s | 开始定位, 通过 map <Leader>s <Plug>(easymotion-prefix) 设置前缀 |
| vim-sneak | |
s{char}{char} | Use s plus two characters tosearch forward in document |
S{char}{char} | Use S plus two characters to search backward in document |
2.4 参考图谱


3.跳转
| 快捷键 | 描述 | 意义 |
|---|---|---|
| ‘’ | Last jump position | |
| ‘. | Last edit position | |
| ‘^ | Exit insert mode position | |
| ctrl + r | 上一次跳转的位置 | |
| [m | 跳转至方法开头 |
4.查找&替换
| 快捷键 | 描述 | 意义 |
|---|---|---|
| 普通模式 | ||
| * | 向下查找光标所在单词并进行全字匹配 | |
| # | 向上查找光标所在单词并进行全字匹配 | |
| g* | 向下查找光标所在单词并进行普通匹配 | |
| g# | 向上查找光标所在单词并进行普通匹配 | |
| n / N | 向 下 / 上 跳转匹配项 | |
| 命令模式 | ||
| / ? | 向 下 / 上 查找匹配 | 键盘位置在同一地方且 / 在下, ?在上 |
| 😒/old/new | 用new替换当前行第一个old | |
| 😒/old/new/g | 用new替换当前行所有的old | |
| %s/old/new/g | 用new替换文件中所有的old |
5.快速编辑
5.1 快速编辑的思想
快速编辑的核心思想就是 operator + motion(range)
范围 - range

操作 - operator
- d(delete) - 删除
- c(change) - 修改(删除并进入编辑模式)
- y(yank) - 复制
- v(visual) - 选中并进入VISUAL模式
动作 - motion
| 动作 | 助记 | 动作 | 助记 |
|---|---|---|---|
iw / aw | w - word | i< / a< | |
i( / a( / 或 ib / ab | b - bracket | i[ / a[ | |
i{ / a{ / 或 iB / aB | it / at | t - tag | |
i" / a" | is / as | s - sentences | |
i' / a' | ip / ap | p - paragraphs | |
| i` / a` | {n}l / {n}h |
5.2 插入&修改
| 快捷键 | 描述 | 意义 |
|---|---|---|
| i | 在光标前插入 | |
| I / shift + i | 在当前行第一个非空字符前插入 | |
| gI | 在当前行第一列插入 | |
| o / O | 在下面新增一行 / 在上面新增一行, 进入insert模式 | |
| a / A | 在光标后插入 / 在当前行最后插入 | |
| c | 修改 | c - change |
| x | 裁剪当前字符 | |
| X | 裁剪前一个字符 | |
| s | 替换, 并进入insert模式 | s - substitutejjkk |
| :r filename | 在当前位置插入另一个文件的内容 | |
| :[n]r filename | 在第n行插入另一个文件的内容 | |
| 插入模式下移动光标 | ||
| 进阶操作 | ||
| df{char} | 配合f{char}命令使用,快速删除到指定字符 | |
| cf{char} | 配合f{char}命令使用,快速删除到指定字符并进入编辑模式 | |
| Ctrl + a / Ctrl + x | 快速自增 / 自减 数字, eg: 1->2 或者 10 ->11 |
5.3 删除
| 快捷键 | 描述 | 意义 |
|---|---|---|
| x | ||
| X | ||
| D | ||
| d{n}l | ||
| d{n}h | ||
| dj | ||
| dh | ||
| dd | 删除当前行 | d - delete |
| dw | 向后删除一个单词 | |
| cw | 向后删除一个单词,并进入编辑模式 | |
| 配合motion操作 | ||
| diw / daw | 删除单词 | dw - delete a world daw - delete all world |
| ciw / caw | 删除单词,并进入编辑模式 | |
| di” / di( / di{ | 删除“”或 () 或 {}内的内容 | |
| cw / caw | 修改【字符 / 单词】,并进入编辑模式 | cw - change a world |
| cj{ | 删除{}里的内容,向后寻找最近的括号 | |
| 进阶操作 | ||
| di^ / da^ di$ / da$ | 配合 ^ 和 $ 删除到行头或者行尾 | |
5.4 剪切&复制
| 快捷键 | 描述 | 意义 |
|---|---|---|
| 复制 | ||
| y | 复制在可视模式下选中的文本 | y - yank |
| yy / Y | 复制整行文本 | |
| y[n]w | 制一(n)个词 | yw - yank a world |
| y0 | 从光标位置复制到行首 | |
| y$ | 从光标位置复制到行尾 | |
| y1G / ygg | 复制光标以上的所有行 | |
| yG | 复制光标以下的所有行 | |
| y[n]l | 复制光标右边1(n)个字符 | |
| y[n]h | 复制光标左边1(n)个字符 | |
| :m,ny<cr> | 复制m行到n行的内容 - 命令模式下 | |
| 剪切 | ||
| [n]x | 剪切光标右边n个字符,相当于d[n]l | |
| [n]X | 剪切光标左边n个字符,相当于d[n]h | |
| d | 删除(剪切)在可视模式下选中的文本 | |
| d$ | 删除(剪切)当前位置到行尾的内容 | |
| d[n]w | 删除(剪切)1(n)个单词 | |
| d[n]l | 删除(剪切)光标右边1(n)个字符 | |
| d[n]h | 删除(剪切)光标左边1(n)个字符 | |
| d0 | 删除(剪切)当前位置到行首的内容 |
5.5 粘贴
| 快捷键 | 描述 | 意义 |
|---|---|---|
| p / | 在光标之后粘贴 | p - put |
| P | 在光标之前粘贴 | |
Insert Mode - 编辑模式
| 快捷键 | 描述 | 意义 |
|---|---|---|
| i / a | 字符前输入 / 字母后输入 | i - insert a - append |
| shift + I / shift + A | 行首输入 / 行末尾输入 | |
| o / O | 新增下一行 / 新增上一行 | |
| ctrl + o | 区别于normal模式,作用是执行一次normal模式的命令 | |
Visual Mode - 可视模式
| 快捷键 | |
|---|---|
| v | |
| ctrl + v | 【可视化块】- 进入可视模式 |
| V = shift + v | 【可视化行】- 进入可视模式, 默认选中当前行 |
| d | 删除选中的字符 |
| c | 删除选中的字符,进入编辑模式 |
| o | 调整选择范围 |
| 可视化块模式 | |
| shift + i | 实现批量插入,可视化块选中之后 |
∆快速选中内容∆
| 快捷键 | 描述 | 意义 |
|---|---|---|
| v + e | 快速选中单词,移动至单词开头 | |
| v% | 快速选中 函数括号匹配方式 | |
| vib / vi( | 快速选中 方法的参数区 | |
| vab | 快速选中 方法的参数区,包括()括号 | |
| viw / viw | 快速选中 单词 | |
| vip / / vap | 快速选中 段落 | |
| viB / vi{ | 快速选中 函数部分 | |
| vaB / / va{ | 快速选中 函数部分,包括{}括号 | |
| vis | ||
| vip | ||
| U | 选中内容变大写 |
Command-Line / Ex Mode - 命令模式
普通模式下按冒号 : 键进入Command-Line模式, 支持输入各种命令
普通模式下按 Q 进入Ex模式, 其实就是多行的Command-Line模式
| :w | Save file w - write |
| :q | q - quit |
| :e | e - edit reload |
| / | 搜索 |
| :%s/旧/新/g | 全局替换 |
| 分屏 | |
:split或:sp | 垂直拆分 |
:vsplit或:vsp | 水平拆分 |
寄存器
参考说明:https://maniafish.github.io/tech_talk/linux/vim_paste.html
vim提供了10类寄存器:
- 匿名寄存器
"" - 编号寄存器
"0到"9 - 小删除寄存器
"- - 26个命名寄存器
"a到"z - 3个只读寄存器
":,".,"% - Buffer交替文件寄存器
"# - 表达式寄存器
"= - 选择和拖放寄存器
"*,"+,"~ - 黑洞寄存器
"_ - 搜索模式寄存器
"/
可在vim中通过:help registers查看帮助,通过:reg可以查看当前各寄存器中的值。
:reg 显示所有寄存器的内容
"" ——不加寄存器索引时,默认使用的寄存器,""yy把当前行的内容放入默认寄存器。
"+ ——系统剪贴板,"+yy把当前行的内容放入系统剪贴板,"+p从系统剪贴板复制到vim。vim 常见问题
清除高亮标记
# 清除高亮标记
:noh 或 :nohlmap命令映射
默认map命令影响到普通模式和可视模式。默认的map就是递归的。如果遇到[nore]这种前缀,比如:noremap,就表示这种map是非递归的。
详细查看 :help map-overview
COMMANDS MODES
:map :noremap :unmap Normal, Visual, Select, Operator-pending
:nmap :nnoremap :nunmap Normal
:vmap :vnoremap :vunmap Visual and Select
:smap :snoremap :sunmap Select
:xmap :xnoremap :xunmap Visual
:omap :onoremap :ounmap Operator-pending
:map! :noremap! :unmap! Insert and Command-line
:imap :inoremap :iunmap Insert
:lmap :lnoremap :lunmap Insert, Command-line, Lang-Arg
:cmap :cnoremap :cunmap Command-line
:tmap :tnoremap :tunmap Terminal-Job查找action配置
:actionlis 想找的actionq: 和 q/ 和 q?
打开历史 命令 或者 查询记录



参考文章
4. Vim Cheat Sheet for Programmers
快捷键指南
1. https://imageslr.com/2021/vim.html#vs-code
2. https://www.someget.cn/other/2021/12/05/vim_coustm01.html
vim配置参考
1. https://github.com/MarsWang42/My-Vim-Conf
vscode vim
https://fanlumaster.github.io/2023/02/06/%E6%88%91%E7%9A%84-VSCode-%E5%9F%BA%E6%9C%AC%E8%AE%BE%E7%BD%AE/