vi是Linux/Unix系统中广泛使用的文本编辑器,以其高效性和灵活性著称,但对新手而言,其特有的三种工作模式(命令模式、插入模式、末行模式)常导致打开后不知如何退出,本文将详细讲解vi的退出方法,涵盖正常退出、异常处理及常见问题,帮助用户熟练掌握操作。

vi的三种工作模式简介
vi的核心是模式切换,退出操作需基于特定模式执行:
- 命令模式:vi的初始模式,用于移动光标、删除、复制等操作,无法直接输入文本。
- 插入模式:通过命令模式进入(按
i/a/o等),可编辑文本,左下角显示-- INSERT --。 - 末行模式:通过命令模式输入进入,用于保存、退出、搜索等高级操作,命令显示在底部。
关键点:退出操作需先回到命令模式或直接在末行模式执行,因此掌握ESC键(切换至命令模式)是前提。
正常退出方法
正常退出分为“保存并退出”和“不保存退出”两类,需根据需求选择。
(一)保存并退出
适用于需要保留修改的场景,需确保文件有写入权限(普通文件或通过sudo打开的文件)。
-
wq(写入并退出)- 操作步骤:
- 编辑完成后,按
ESC确保处于命令模式(左下角无-- INSERT --)。 - 输入
wq,按回车执行。
- 编辑完成后,按
- 原理:
w表示“写入”(保存),q表示“退出”,组合完成保存后关闭vi。 - 适用场景:文件已修改且需保存,是最常用的退出方式。
- 操作步骤:
-
x(写入并退出,未修改不保存)
- 操作步骤:同
wq,输入x后回车。 - 原理:与
wq功能类似,但仅当文件被修改时才会写入,未修改则直接退出,可避免无意义的磁盘写入。 - 适用场景:频繁编辑时减少磁盘I/O,比
wq更高效。
- 操作步骤:同
-
ZZ(大写,命令模式下快捷退出)- 操作步骤:在命令模式下直接按
Shift+Z两次(即ZZ)。 - 原理:vi的内置快捷键,等同于
wq,无需进入末行模式,操作更便捷。 - 注意:必须大写,小写
zz是移动光标到屏幕开头,非退出功能。
- 操作步骤:在命令模式下直接按
(二)不保存退出
适用于修改错误或无需保留内容的场景,需强制忽略未保存提示。
-
q!(强制退出,不保存)- 操作步骤:
- 按
ESC回到命令模式。 - 输入
q!,按回车执行。
- 按
- 原理:表示“强制”,覆盖vi的“未保存退出”保护机制,直接关闭文件且不保存修改。
- 适用场景:误操作修改、测试阶段或文件无需保留,避免保存无用内容。
- 操作步骤:
-
q(仅未修改时退出)- 操作步骤:同
q!,输入q后回车。 - 原理:仅当文件未被修改时才能退出,若已修改会提示
E37: No write since last change(未写入自上次更改),此时需改用wq或q!。 - 适用场景:打开文件后未做任何修改,直接查看内容后退出。
- 操作步骤:同
退出命令对比总结
为方便记忆,将常用退出命令整理如下:
| 命令 | 功能说明 | 适用场景 | 注意事项 |
|---|---|---|---|
wq |
保存修改并退出 | 需保留修改,文件可写 | 默认命令,通用性最强 |
x |
保存修改(仅修改时)并退出 | 减少无意义写入,频繁编辑时 | 未修改时直接退出,更高效 |
ZZ |
命令模式下保存退出 | 快捷操作,避免输入冒号 | 必须大写,小写zz非退出 |
q! |
强制退出,不保存修改 | 修改错误或无需保存时 | 覆盖未保存提示,丢失所有修改 |
q |
退出(仅未修改时) | 未编辑文件直接退出 | 修改后需配合wq或q! |
异常情况处理
(一)提示“E37: No write since last change”
原因:文件有未保存修改,直接输入q被拒绝。
解决:

- 若需保存:输入
wq回车。 - 若不保存:输入
q!回车。
(二)文件只读(权限不足)
原因:尝试保存时提示E45: 'readonly' option is set(如修改系统文件或他人文件)。
解决:
- 普通文件:用
chmod u+w 文件名添加写权限后,再wq。 - 系统文件:通过
sudo vi 文件名打开,再用wq!强制保存(需root权限)。
(三)vi卡死/无响应
原因:文件过大、终端异常或vi程序bug。
解决:
- 先尝试
ESC→q!退出。 - 若无效,终端输入
ps aux | grep vi查找进程(如PID为1234),执行kill -9 1234强制结束(注意:可能导致未保存内容丢失,优先尝试正常退出)。
注意事项
ESC键的重要性:不确定当前模式时,多按几次ESC,确保左下角无-- INSERT --或-- REPLACE --等提示,进入命令模式后再操作。- 末行模式命令格式:所有以开头的命令(如
wq)需输入后按回车执行,命令会显示在底部。 - 大小写敏感:
ZZ(大写)与zz(小写)、Wq(错误)与wq(正确)功能不同,需严格区分大小写。 - 权限管理:修改重要文件前建议备份,避免强制保存(
wq!)导致数据丢失。
相关问答FAQs
问题1:为什么在vi中输入wq后按回车,提示“E212: Can’t open file for writing”?
解答:这是因为文件没有写入权限(如普通用户修改/etc目录下的文件,或文件被设置为只读),解决方法:
- 若文件属于root用户,用
sudo vi 文件名重新打开,再执行wq。 - 若普通文件,用
ls -l 文件名检查权限,通过chmod u+w 文件名添加写权限后重试。
问题2:在vi编辑时按了多次ESC,为什么还是无法输入wq?
解答:可能存在两种情况:
- 终端锁定:误触
Ctrl+S会导致终端锁定(冻结输入),按Ctrl+Q解锁即可。 - 模式未切换:部分终端或vi版本下,单次
ESC可能未生效,连续按3次ESC确保进入命令模式,观察左下角是否显示-- NORMAL --(命令模式标识),再输入wq。
若仍无效,可尝试强制关闭终端(Ctrl+C或Ctrl+),重新打开文件后操作。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/16854.html