当我们失去焦点时,我已经习惯了我的编辑器自动保存文件.我最近切换到MacVim,我无法重现这种行为.我试过这个:
autocmd BufLeave,FocusLost * wall
Run Code Online (Sandbox Code Playgroud)
但是如果在窗口或MacVim失去焦点时未命名缓冲区,我会收到如下错误:
Error detected while processing BufLeave Auto commands for "*":
E141: No file name for buffer 1
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为:wall文件说:
Write all changed buffers. Buffers without a file
name or which are readonly are not written.
Run Code Online (Sandbox Code Playgroud)
所以我希望它能够跳过未命名的缓冲区.有一个更好的方法吗?
编辑:
我很确定通过使用更好的方式来实现我的预期BufLeave- 当我在它们之间切换时保存缓冲区,所以我没有得到"自上次更改后没有写入" - 是设置'autowriteall'.当MacVim失去对其他应用程序的关注时,问题仍然存在(FocusLost).
Ari*_*zis 40
你并不关心那些情况下的错误,因为无论如何你都无法合理地对待它们 - 特别是在失去焦点时.所以只是吞下它们:
autocmd BufLeave,FocusLost * silent! wall
Run Code Online (Sandbox Code Playgroud)
比精心设计的舞蹈简单得多,以确定哪里会出现错误以避免它.