Vim 常见报错速查

开发中常遇到的 Vim 报错信息,快速定位原因和解决方案。

E37: No write since last change / E162: No write since last change for buffer

出现场景:尝试退出 Vim 时

原因:有未保存的修改,Vim 阻止退出以防丢失

解决方案:

  1. 保存并退出::wq
  2. 不保存强制退出::q!
  3. 保存到其他文件::w /tmp/backup.txt 然后 :q!
  4. 如果多个缓冲区有修改::qa! 全部强制退出

预防:养成 :w 随时保存的习惯

E45: 'readonly' option is set (add ! to override)

出现场景:尝试保存文件时

原因:文件以只读模式打开,或没有写入权限

解决方案:

  1. 强制保存::w!
  2. 用 sudo 保存::w !sudo tee %
  3. 另存为有权限的位置::w ~/backup.txt
  4. 检查文件权限:在终端中 ls -la <file>

预防:需要编辑系统文件时用 sudo vim 打开

E325: ATTENTION - Found a swap file

出现场景:打开文件时发现 .swp 文件

原因:上次编辑异常退出(崩溃、终端关闭)留下了交换文件

解决方案:

  1. 恢复未保存的修改:按 R(Recover)
  2. 确认不需要恢复:按 D(Delete swap file)
  3. 只读打开:按 O(Open Read-Only)
  4. 手动删除 swap 文件:rm .filename.swp

预防:正常退出 Vim(:wq 或 :q!),不要直接关闭终端

E353: Nothing in register + / 系统剪贴板无法使用

出现场景:尝试用 "+y 或 "+p 操作系统剪贴板时

原因:Vim 编译时未包含 +clipboard 特性

解决方案:

  1. 检查支持:vim --version | grep clipboard
  2. Ubuntu/Debian:sudo apt install vim-gtk3
  3. CentOS/RHEL:sudo yum install vim-X11
  4. macOS:brew install vim(Homebrew 版本默认支持)
  5. 临时方案::set paste 后用终端粘贴

预防:安装带 GUI 支持的 Vim 版本,或使用 Neovim(默认支持)