Esc 进入命令模式是 vim 退出前提,否则 :wq 等命令无效;:wq 安全保存退出,只读文件需 :wq!(非 :q!);未保存时 :q 被拦截,须 :wq/:x/:q! 三选一。

按 Esc 进入命令模式是前提
几乎所有 vim 退出操作失败,都是因为卡在插入模式(左下角显示 -- INSERT --)却直接输 :wq。vim 不识别,光标可能乱跳,甚至触发意外替换或删除。
必须先按 Esc 键——听到一声“咔”或看到左下角插入提示消失,才算回到命令模式。如果不确定是否成功,多按一次 Esc 没坏处;按完后随便敲几个字母(如 asdf),没反应就对了。
:wq 是最常用且安全的保存退出方式
进入命令模式后,输入 :wq 并回车,vim 会尝试写入文件并退出。它等价于先执行 :w(保存),再执行 :q(退出),但合起来更可靠。
- 如果文件有写权限,
:wq成功后直接返回 shell - 如果文件只读(比如
/etc/hosts),:wq会报错:E212: Can't open file for writing - 如果只是想保存但继续编辑,用
:w即可,不加q
遇到只读文件时该用 :wq! 而不是 :q!
:q! 是放弃修改、强制退出,跟保存完全无关;而 :wq! 才是在权限受限时“强行覆盖保存并退出”的正确命令。
典型场景:你用 sudo vim /etc/hosts 编辑,但忘了加 sudo,结果以普通用户身份打开——这时 :wq 失败,:wq! 仍会失败(权限不够),必须先 Esc → :q! 退出,再用 sudo vim /etc/hosts 重开。
容易混淆的点:
-
:w!表示“强制保存到当前文件”,但不会退出 -
:x和:wq功能相似,但:x只在文件被修改时才写入,适合不想误触保存的场景 -
ZZ(Shift + z 两次)是:wq的快捷键,但很多人误按成Zz或单个Z,无效
退出前没保存修改,vim 会拦住你
如果你改了内容但没执行 :w,直接输 :q,vim 不会立刻退出,而是显示:E37: No write since last change (add ! to override)。
这时你只有三个选择:
- 按
Enter继续留在 vim,再输:wq - 输
:q!强制丢弃所有改动 - 输
:wq或:x正常保存退出
别指望 :q 在有未保存修改时“静默退出”——这是 vim 的保护机制,不是 bug。
真正容易被忽略的是:哪怕只多敲了一个空格,也算“修改”。所以每次退出前,留意左下角有没有 [+] 标记(表示已修改未保存)。


















