什么是‘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
相关产品推荐
相关产品推荐

