vim 常用快捷键汇总
学习过程中还是觉得 vim 好用,所以让查老师总结了一份常用操作,加油 😃
核心哲学:模式化编辑
首先要理解 Vim 的不同模式,这是所有快捷键的基础:
- 普通模式 (Normal Mode):默认模式。用于移动光标、复制、粘贴、删除等操作。按
Esc
键从任何其他模式返回。 - 插入模式 (Insert Mode):用于输入文本。从普通模式按
i
(insert),a
(append),o
(open new line) 等键进入。 - 可视模式 (Visual Mode):用于选择文本。从普通模式按
v
(字符选择),V
(行选择),Ctrl+v
(块选择) 进入。 - 命令模式 (Command Mode):用于执行命令(如保存、退出、搜索替换)。从普通模式按
:
进入。
一、移动光标 (普通模式下)
基本移动 (HJKL)
h
- 左j
- 下k
- 上l
- 右
单词移动
w
- 移动到下一个单词开头e
- 移动到当前或下一个单词末尾b
- 移动到上一个单词开头ge
- 移动到上一个单词末尾W
,E
,B
- 以空格分隔的“大字”单词为单位移动(更快)
行内移动
0
- 移动到行首^
- 移动到本行第一个非空白字符$
- 移动到行尾g_
- 移动到行尾非空白字符f{字符}
- 向前搜索并移动到某个字符(如fa
移动到下一个字母 ‘a’)F{字符}
- 向后搜索并移动到某个字符t{字符}
- 移动到某个字符之前T{字符}
- 反向移动到某个字符之前;
- 重复上一次f
,t
,F
,T
操作,
- 反向重复上一次操作
屏幕移动
gg
- 移动到文件第一行G
- 移动到文件最后一行:{行号}
- 移动到指定行(如:55
跳到第55行)Ctrl + f
- 向下翻一页Ctrl + b
- 向上翻一页Ctrl + d
- 向下翻半页Ctrl + u
- 向上翻半页H
- 移动到当前屏幕的顶部M
- 移动到当前屏幕的中间L
- 移动到当前屏幕的底部zz
- 将当前行置于屏幕中央
二、编辑操作
进入插入模式
i
- 在光标前插入a
- 在光标后插入I
- 在行首插入A
- 在行尾插入o
- 在当前行下方新建一行并插入O
- 在当前行上方新建一行并插入s
- 删除当前字符并插入S
- 删除当前行并插入C
- 删除从光标到行尾的内容并插入(相当于c$
)
删除/剪切 (配合文本对象,威力无穷)
x
- 删除当前字符X
- 删除前一个字符d{motion}
- 删除移动命令所覆盖的文本(核心命令)dw
- 删除到下一个单词开头de
- 删除到单词末尾d$
/D
- 删除到行尾d0
- 删除到行首dd
- 删除整行dgg
- 删除到文件开头dG
- 删除到文件结尾
{数字}dd
- 删除多行(如3dd
删除3行)
复制 (Yank)
y{motion}
- 复制移动命令所覆盖的文本yw
- 复制一个单词yy
/Y
- 复制整行y$
- 复制到行尾
{数字}yy
- 复制多行
粘贴 (Put)
p
- 在光标后粘贴P
- 在光标前粘贴
撤销与重做
u
- 撤销Ctrl + r
- 重做
三、文本对象 (超级强大!)
操作 d
(删除), y
(复制), c
(修改), v
(选择) 的利器。
i
+对象
- inside,操作对象内部的文本a
+对象
- around,操作对象以及周边的文本(比如包括引号本身)
常用对象:
w
- 单词s
- 句子p
- 段落'
,"
,`
- 引号(
,)
,b
- 小括号 ( )[
,]
- 中括号 [ ]{
,}
,B
- 大括号 { }t
- XML/HTML 标签
示例:
diw
- 删除光标所在的单词(不包括周围空格)ci"
- 修改双引号内的内容(删除并进入插入模式)yap
- 复制整个段落vat
- 选择整个 XML/HTML 标签及其内容
四、查找与替换
查找
/pattern
- 向下搜索模式?pattern
- 向上搜索模式n
- 继续下一个匹配项N
- 继续上一个匹配项*
- 向下搜索光标所在的单词#
- 向上搜索光标所在的单词
替换 (命令模式)
:s/old/new
- 将当前行的第一个old
替换为new
:s/old/new/g
- 将当前行的所有old
替换为new
:%s/old/new/g
- 将全文的所有old
替换为new
:%s/old/new/gc
- 全文替换,但每次替换前需要确认:起始行,结束行s/old/new/g
- 在指定行范围内替换(如:10,20s/foo/bar/g
)
五、可视模式 (Visual Mode)
v
- 进入字符可视模式V
- 进入行可视模式Ctrl + v
- 进入块可视模式(列模式)- 选中文本后,可以使用所有普通模式的编辑命令:
d
,y
,c
,:s/old/new/
等
六、窗口与标签页
窗口分割
:sp [文件名]
- 水平分割窗口:vsp [文件名]
- 垂直分割窗口Ctrl + w w
- 在窗口间循环切换Ctrl + w h/j/k/l
- 切换到左/下/上/右的窗口Ctrl + w =
- 使所有窗口等宽等高Ctrl + w _
- 最大化当前窗口高度Ctrl + w |
- 最大化当前窗口宽度Ctrl + w c
/:q
- 关闭当前窗口Ctrl + w o
- 关闭其他所有窗口
标签页
:tabnew [文件名]
- 新建标签页:tabc
- 关闭当前标签页:tabo
- 关闭其他所有标签页gt
/:tabn
- 切换到下一个标签页gT
/:tabp
- 切换到上一个标签页{数字}gt
- 切换到第 N 个标签页
七、其他常用命令
.%
- 跳转到匹配的括号()
,{}
,[]
.
- 重复上一次修改操作(极其强大)J
- 将下一行合并到当前行(连接行)Ctrl + a
- 将光标下的数字增加 1Ctrl + x
- 将光标下的数字减少 1:r 文件名
- 将文件内容插入到光标下方:r !命令
- 将命令的执行结果插入到光标下方(如:r !date
插入当前日期)
学习建议
- 不要死记硬背:打开
vimtutor
(在终端输入此命令),它是官方的最佳入门教程。 - 循序渐进:先熟练掌握移动 (
h/j/k/l
,w/b
,gg/G
)、进入插入模式 (i/a/o
)、保存退出 (:wq
)、撤销 (u
)。 - 实践为主:在日常编辑中强迫自己使用,哪怕开始很慢。
- 掌握组合技:理解
操作符 + 动作命令
的模式(如d
+w
=dw
)。这是 Vim 的灵魂。 - 探索文本对象:这是让你从 Vim 新手进阶为高手的关键。