我在我的
.vimrc
文件中尝试了以下内容::au FocusLost * silent! wa
autocmd BufLeave,FocusLost silent! wall
同时还尝试了:
但是无法使其生效,当我按下 Ctrl+Z 或切换到终端的另一个选项卡 (mac) 时,它仍然不会自动保存。
.vimrc
文件中尝试了以下内容::au FocusLost * silent! wa
autocmd BufLeave,FocusLost silent! wall
同时还尝试了:
但是无法使其生效,当我按下 Ctrl+Z 或切换到终端的另一个选项卡 (mac) 时,它仍然不会自动保存。
BufLeave
会在你跳转到另一个 buffer 时触发。使用命令行版本的 Vim 并不会触发此事件,例如按下 <C-z>
或切换到另一个 Terminal.app 标签页等,并不会触发此事件,因为 CLI Vim 完全不关心终端仿真器的 GUI 或环境,而且你并没有离开当前 buffer。
FocusLost
同样也是如此(或多或少是这样,文档中表示其仅适用于 GUI,但未说明适用于哪些终端)。
因此,在 MacVim 中可能会起作用,但在 CLI Vim 中肯定不行。
实际上,由于 Vim 不知道你的终端仿真器的标签页或是否被放到后台,我怀疑你无法在 CLI Vim 中实现你的目标。
我碰巧在我的~/.vimrc
文件中设置了 autocmd FocusLost * :wa
,但我已将其放在 if has("gui_running")
条件语句中,并且还设置了 inoremap <Esc> <Esc>:w<CR>
来省去按 ESC 的步骤。希望有所帮助。
:w
(或任何绑定)即可自动将更改保存到磁盘。AutoSave默认情况下处于禁用状态,运行:AutoSaveToggle
以启用/禁用AutoSave。如果您希望始终启用插件,则可以使用g:auto_save
选项(在.vimrc
中放置'let g:auto_save = 1'
)。