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 或 :nohl
map命令映射
默认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 想找的action
q: 和 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/