如何在失去焦点时使Vim自动保存文件?

Pee*_*eja 31 vim

当我们失去焦点时,我已经习惯了我的编辑器自动保存文件.我最近切换到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)

比精心设计的舞蹈简单得多,以确定哪里出现错误以避免它.

  • 它需要一个*,比如`autocmd BufLeave,FocusLost*无声!墙壁`,至少对我而言,确实如此. (7认同)