vi 编辑器是 Linux 系统中最常用的文本编辑器之一,核心特点是分为命令模式 (默认进入模式,用于执行操作命令)和插入模式(用于输入文本),所有快捷键均需在命令模式下使用。以下按功能分类整理常用快捷键,结构清晰且标注详细用途。
一、模式切换快捷键(核心基础)
vi 的所有操作依赖模式,必须先掌握模式切换,否则快捷键无法生效。
| 快捷键 | 操作说明 | 适用场景 |
|---|---|---|
i |
从命令模式 进入插入模式,光标位置不变 | 需在当前光标前直接输入文本时使用 |
I |
从命令模式 进入插入模式 ,光标跳转至当前行的行首 | 需在一行开头输入内容(如行首加注释)时使用 |
a |
从命令模式 进入插入模式 ,光标跳转至当前字符的后一位 | 需在光标后补充内容(如修正漏输字符)时使用 |
A |
从命令模式 进入插入模式 ,光标跳转至当前行的行尾 | 需在一行末尾追加内容(如补全语句)时使用 |
o |
从命令模式 进入插入模式 ,在当前行的下方新建一行 | 需在当前行下新增内容(如换行写新代码)时使用 |
O |
从命令模式 进入插入模式 ,在当前行的上方新建一行 | 需在当前行上插入内容(如补充前置说明)时使用 |
Esc |
从插入模式 退回命令模式 | 输入完文本后,需执行保存、删除等操作时必须按此键 |
二、光标移动快捷键(高效定位)
命令模式下,无需鼠标即可快速移动光标,分为 "基础移动" 和 "快速跳转" 两类。
1. 基础移动(逐字符 / 逐行)
| 快捷键 | 操作说明 |
|---|---|
h |
光标向左移动 1 个字符(对应键盘左箭头) |
j |
光标向下移动 1 行(对应键盘下箭头) |
k |
光标向上移动 1 行(对应键盘上箭头) |
l |
光标向右移动 1 个字符(对应键盘右箭头) |
0(数字零) |
光标跳转至当前行的行首 (比按多次h更高效) |
$ |
光标跳转至当前行的行尾 (比按多次l更高效) |
2. 快速跳转(跨行 / 跨文件)
| 快捷键 | 操作说明 | 示例 |
|---|---|---|
nG |
光标跳转至第n行(n为数字,如5G跳转到第 5 行) |
编辑代码时,需快速定位到指定行号(如报错行) |
G |
光标跳转至文件最后一行 | 查看文件末尾内容(如日志的最新记录) |
gg |
光标跳转至文件第一行 | 从文件中间快速回到开头 |
w |
光标向后跳转 1 个单词(以空格 / 标点分隔) | 快速浏览英文文档或代码变量 |
b |
光标向前跳转 1 个单词 | 回退查看上一个单词 |
Ctrl + f |
屏幕向下滚动 1 屏(类似 "翻下页") | 查看长文件时快速向下翻页 |
Ctrl + b |
屏幕向上滚动 1 屏(类似 "翻上页") | 查看长文件时快速向上翻页 |
三、文本编辑快捷键(删除 / 复制 / 粘贴)
命令模式下的核心编辑操作,无需进入插入模式即可完成文本修改。
1. 删除操作(d = delete)
| 快捷键 | 操作说明 | 示例 |
|---|---|---|
x |
删除光标所在位置的 1 个字符 | 修正单个错字(如把 "teh" 改为 "the",删除 "e" 后补 "h") |
nx |
删除光标所在位置向后的 n 个字符 (n为数字,如3x删 3 个字符) |
删除连续错字(如 "abc123" 中删 "123",按3x) |
dd |
删除光标所在的整行 | 删除无用行(如空行、错误代码行) |
ndd |
删除光标所在行向下的 n 行 (n为数字,如5dd删 5 行) |
批量删除多行内容(如删除一段无用代码) |
d0 |
删除光标所在位置到行首的所有字符 | 清除行首到光标前的内容(如删除行首多余空格) |
d$ |
删除光标所在位置到行尾的所有字符 | 清除光标后到行尾的内容(如删除行尾多余字符) |
dw |
删除光标所在位置向后的 1 个单词 | 删除错误的变量名或英文单词 |
2. 复制操作(y = yank,意为 "复制")
| 快捷键 | 操作说明 | 示例 |
|---|---|---|
yy |
复制光标所在的整行 | 复制一行代码或文本,后续粘贴 |
nyy |
复制光标所在行向下的 n 行 (n为数字,如3yy复制 3 行) |
批量复制多行内容(如复制一段函数代码) |
y0 |
复制光标所在位置到行首的所有字符 | 复制行首到光标前的内容(如复制行首注释) |
y$ |
复制光标所在位置到行尾的所有字符 | 复制光标后到行尾的内容(如复制行尾的变量) |
yw |
复制光标所在位置向后的 1 个单词 | 复制单个变量名或英文单词 |
3. 粘贴操作(p = put,意为 "粘贴")
| 快捷键 | 操作说明 | 适用场景 |
|---|---|---|
p |
将复制的内容粘贴到光标所在行的下方 | 复制一行后,在下方插入该内容 |
P |
将复制的内容粘贴到光标所在行的上方 | 复制一行后,在上方插入该内容 |
四、文件保存与退出快捷键(操作收尾)
所有保存、退出操作均需在命令模式下执行,需先按Esc确保退出插入模式。
| 快捷键 | 操作说明 | 注意事项 |
|---|---|---|
:w |
保存当前文件(不退出 vi) | 编辑过程中定期保存,避免内容丢失 |
:w 文件名 |
将当前内容另存为 指定文件名(如:w test.txt) |
需保存副本或重命名文件时使用 |
:q |
退出 vi(仅当文件未修改或已保存时生效) | 若文件未保存,执行此命令会提示 "E37: 已修改但尚未保存" |
:q! |
强制退出 vi(不保存未修改的内容) | 确认放弃当前修改时使用,谨慎操作 |
:wq |
保存当前文件并退出 vi(等同于:x) |
编辑完成后常用的 "保存并退出" 命令 |
ZZ |
(大写 Z 连按两次)快速保存并退出 vi | 命令模式下直接按,比输入:wq更高效 |
五、其他实用快捷键(查找 / 替换 / 撤销)
1. 文本查找
| 快捷键 | 操作说明 | 示例 |
|---|---|---|
/关键词 |
从光标位置向后查找 指定关键词(如/error查找 "error") |
查找日志中的错误信息、代码中的变量 |
?关键词 |
从光标位置向前查找 指定关键词(如?test查找 "test") |
从当前位置回退查找内容 |
n |
继续查找下一个匹配的关键词(与/或?方向一致) |
找到一个匹配后,按n跳转到下一个 |
N |
继续查找上一个匹配的关键词(与/或?方向相反) |
找到一个匹配后,按N回退到上一个 |
2. 文本替换(需输入命令,格式::[范围]s/旧内容/新内容/选项)
| 命令 | 操作说明 | 示例 |
|---|---|---|
:s/旧/新 |
仅替换当前行的第一个 "旧内容" | 当前行有多个 "abc",仅替换第一个为 "def"::s/abc/def |
:s/旧/新/g |
替换当前行 的所有 "旧内容"(g=global,全局) |
当前行所有 "abc" 替换为 "def"::s/abc/def/g |
:%s/旧/新 |
替换整个文件的第一个 "旧内容" | 全文件第一个 "error" 替换为 "warning"::s/error/warning |
:%s/旧/新/g |
替换整个文件的所有 "旧内容" | 全文件所有 "abc" 替换为 "123"::%s/abc/123/g |
:n1,n2s/旧/新/g |
替换第 n1 行到第 n2 行的所有 "旧内容" | 替换第 5-10 行的 "test" 为 "demo"::5,10s/test/demo/g |
3. 撤销与恢复
| 快捷键 | 操作说明 | 示例 |
|---|---|---|
u |
撤销上一步操作(类似 Windows 的Ctrl+Z) |
误删一行后,按u可恢复该行 |
Ctrl + r |
恢复上一步被撤销的操作(即 "反撤销") | 撤销后发现操作正确,按Ctrl+r恢复 |
总结
vi 快捷键的核心是 "命令模式优先",需牢记先按 Esc 退插入模式,再执行快捷键。日常使用中,重点掌握 "模式切换(i/Esc)、光标移动(h/j/k/l/gg/G)、编辑(dd/yy/p)、保存退出(:wq/ZZ)" 即可满足基础需求,复杂操作(如替换、查找)可逐步熟悉。