You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

什么是‘modified hidden buffer’?能否禁用?gVim 8.0便携版问题求助

解决gVim 8.0便携版E37错误:无需感叹号即可新建/退出

我之前也被这个问题烦过好一阵!咱们先搞清楚根源,再给你几个实用的解决办法:

为什么会出现这个错误?

你提到的“modified hidden buffer”其实大概率是那个默认打开的空白无名称缓冲区——哪怕你啥内容都没写,Vim默认也会把这个空缓冲区标记为“已修改”(因为它认为从“不存在”到“新建空白文件”也算一种更改)。当你用:enew新建文件或者:q退出时,Vim会检查所有缓冲区,发现这个隐藏的修改过的缓冲区,就弹出E37提示了。

你可以用:ls命令查看所有缓冲区,带+号的就是标记为已修改的,比如:

1 %a + " [No Name]" line 1

这个就是那个“罪魁祸首”的隐藏缓冲区。

解决办法(按推荐程度排序)

方法1:让空白缓冲区不被标记为已修改(最安全)

通过自动命令,让Vim识别新建的空白文件,把它设为“无文件类型”缓冲区,这样Vim就不会认为它有未保存更改了。在你的_vimrc(便携版的配置文件)里添加:

autocmd BufNewFile * if line('$') == 1 && getline(1) == '' | set buftype=nofile | endif

这条命令的意思是:当新建一个文件时,如果文件只有一行且内容为空,就把该缓冲区的类型设为nofile——这类缓冲区不会触发“未保存更改”的提示,完美解决你的问题。

方法2:映射命令,默认强制操作(简单但需谨慎)

如果你懒得搞配置,只想让:q或:enew默认带!,可以给命令做缩写映射:

  • 让:q默认强制退出:
    cnoreabbrev q q!
    
    注意:这样所有的:q都会变成q!,如果有真正修改过的文件,会直接丢失更改,谨慎使用!
  • 让:enew默认强制新建:
    cnoreabbrev enew enew!
    
    这个相对安全点,只会在新建文件时忽略未保存的空白缓冲区。

方法3:手动清理隐藏缓冲区

每次操作前,用:bd!删除那个修改过的隐藏缓冲区(先通过:ls找到它的编号,比如编号1就用:bd! 1),但这个方法太繁琐,不推荐日常用。

总结

最推荐方法1,既解决了问题,又不会有丢失文件的风险。添加配置后重启gVim,再试试:enew或:q,应该就不会再弹出E37提示了!

内容的提问来源于stack exchange,提问作者Ahu Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:39:33