掌握Linux Vi编辑器核心命令,关键在于理解“正常模式”与“插入模式”的切换逻辑,熟练运用基础导航、文本编辑及批量替换命令,即可高效完成90%以上的日常文件处理任务。
Vi编辑器作为Linux系统中最基础且强大的文本编辑工具,其学习曲线虽陡峭,但一旦掌握,效率将呈指数级提升,不同于图形界面编辑器的所见即所得,Vi采用键盘驱动的操作逻辑,这种设计初衷是为了在资源受限的终端环境中实现极致的响应速度,对于系统管理员、开发者以及运维工程师而言,Vi不仅是修配置文件的利器,更是深入理解Unix哲学中“组合小工具完成大任务”理念的入口,业内专家指出,熟练的Vi操作能力是区分初级与高级Linux用户的显著标志之一,因为其在远程服务器维护中的无图形依赖特性具有不可替代性。
Vi编辑器工作模式解析与基础导航
理解Vi的核心在于打破“打字即编辑”的思维定势,Vi默认处于“正常模式”(Normal Mode),此时键盘输入被视为指令而非字符,只有进入“插入模式”(Insert Mode),你才能像使用记事本一样输入文字。
模式切换的关键按键
模式切换是Vi操作的基石,以下是几种最常用的切换方式:
- 进入插入模式:按下
i键(当前光标前插入)、a键(当前光标后追加)、o键(在当前行下方新开一行)或I键(行首插入)。 - 退出插入模式:按下
Esc键或Ctrl + [组合键,返回正常模式。 - 进入命令行模式:按下 键,用于保存、退出或执行搜索替换命令。
高效移动光标技巧
在正常模式下,光标的移动决定了你操作的范围,避免使用方向键,因为手离开主键盘区会降低效率。
- 字符级移动:
h(左)、j(下)、k(上)、l(右)。 - 单词级移动:
w(下一个单词开头)、b(上一个单词开头)、e(下一个单词结尾)。 - 行级移动:
0(行首)、(行尾)、gg(文件第一行)、G(文件最后一行)。 - 屏幕级移动:
Ctrl + u(向上翻页)、Ctrl + d(向下翻页)、Ctrl + f(向下整屏)、Ctrl + b(向上整屏)。

文本编辑与删除操作实战
编辑文本是Vi的高频场景,掌握组合命令能大幅减少按键次数。
删除与复制的精准控制
Vi的删除命令遵循“动词+名词”的逻辑,其中动词是删除指令,名词是移动指令。
- 删除字符:
x删除当前光标所在字符,X删除光标前字符。 - 删除单词:
dw删除从光标到单词结尾的内容。 - 删除整行:
dd删除当前行,若需删除多行,可使用5dd删除当前行及下方4行,共5行。 - 复制与粘贴:
yy复制当前行,p在光标后粘贴,P在光标前粘贴,同样支持计数,如3yy复制3行。
撤销与重做的平衡
在修改过程中,犯错是难免的,Vi提供了强大的撤销机制:
- 撤销上一步操作:
u。 - 重做被撤销的操作:
Ctrl + r。
值得注意的是,Vi的撤销粒度是“命令”而非“字符”,这意味着一次 dd 删除整行后,按一次 u 即可恢复整行,无需逐个字符撤销。
搜索、替换与高级技巧
当处理大型配置文件或代码文件时,全局搜索和替换功能显得尤为重要,这也是许多用户询问“vi编辑器批量替换命令”时的核心痛点。
精准定位文本
- 向下搜索:在正常模式下输入 后跟搜索关键词,如
/error,按Enter确认,按n跳转到下一个匹配项,按N跳转到上一个。 - 向上搜索:输入 后跟关键词,方向逻辑与 相反。
-

高亮显示:在命令行模式下输入
set hlsearch可高亮所有匹配项,输入nohlsearch可取消高亮。
全局替换命令详解
替换命令格式为 [范围]s/原字符串/新字符串/[选项]。
- 当前行替换:
s/old/new/仅替换当前行第一个匹配项。 - 全局替换:
%s/old/new/g替换文件中所有行的所有匹配项。 代表整个文件,g代表全局(每行所有匹配项)。 - 忽略大小写:
set ic开启忽略大小写模式,随后执行替换命令时将不区分大小写。 - 确认替换:
s/old/new/gc在每次替换前询问用户确认,适合谨慎操作。
正则表达式在替换中的应用
Vi支持基础正则表达式,可处理更复杂的替换场景,使用 () 捕获组引用前面匹配的内容,& 代表整个匹配串,这在代码重构或日志格式调整中极为实用。
保存退出与配置文件优化
操作完成后,正确的保存退出方式能避免数据丢失。
- 保存并退出:
wq或x。 - 强制退出:
q!放弃所有修改并退出。 - 只读退出:
q若文件未修改可直接退出,若有修改则报错。
为了提升长期使用的体验,建议配置 .vimrc 文件,在用户主目录下创建或编辑 ~/.vimrc,加入常用设置:
set number " 显示行号 set tabstop=4 " Tab宽度设为4空格 set shiftwidth=4 " 自动缩进宽度 set expandtab " 将Tab转换为空格 set autoindent " 自动缩进 set showmode " 显示当前模式
这些配置能显著改善Vi的易用性,使其更贴近现代编辑器的习惯,据行业共识认为,良好的配置文件习惯能减少约30%的重复性按键操作,尤其在处理Python或JSON等对缩进敏感的文件时,效果更为明显。
Vi编辑器常见问题与最佳实践

在实际使用中,用户常遇到一些特定场景的问题,掌握这些技巧能避免陷入困境。
如何处理只读文件
当尝试编辑受权限保护的文件时,Vi会提示“E45: ‘readonly’ option is set”,若需强制写入,可在命令行模式下输入 w!,系统会提示输入root密码(若使用sudo启动)或要求确认覆盖,更推荐的做法是使用 sudo vi filename 以管理员权限启动编辑器,避免后续权限问题。
Vim与Vi的区别
虽然命令通用,但现代Linux系统默认安装的多为Vim(Vi IMproved),Vim提供了语法高亮、代码折叠、插件支持等增强功能,对于开发者而言,Vim的语法高亮能极大降低阅读代码错误的概率,若发现命令无效,检查是否安装了Vim而非基础Vi。
如何恢复意外关闭的文件
Vi/Vim在崩溃或意外退出时,通常会在当前目录生成以 .swp 或 .swo 结尾的交换文件,重新打开文件时,Vi会检测到交换文件并询问是否恢复,选择“Recover”可找回未保存的修改,为避免数据丢失,建议养成频繁保存(Ctrl + s 在部分终端配置中有效,或手动 w)的习惯。
Vi编辑器常用命令Q&A
vi编辑器批量替换命令具体怎么写?
批量替换命令格式为 %s/原内容/新内容/g。 表示对整个文件生效,g 表示全局替换(每行所有匹配项)。%s/old/new/g 会将文件中所有 “old” 替换为 “new”,若需忽略大小写,需先执行 set ic。
vi编辑器如何快速跳转到指定行号?
在正常模式下,直接输入行号数字,然后按 G 键即可跳转,例如输入 100G 会跳转到第100行,若行号较大,也可先按 Shift + : 进入命令行模式,输入 100 后回车。
vi编辑器中如何删除从当前行到文件末尾的所有内容?
在正常模式下,先按 d 键,再按 Shift + G(即 dG)。d 是删除命令,G 代表文件最后一行,组合起来即删除从当前光标位置到文件末尾的所有内容,包括当前行。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/416279.html
