我的插件中有用于 BufWritePost 的 autocmd。 (我在此自动命令中更新整个项目的标签,这是插件 Indexer.tar.gz )
有时我需要保存很多文件(我做 ":wa")。而且,当然,每个文件保存都会调用我的 autocmd。
我想在所有文件保存后调用它。比如说,如果我有 20 个未保存的缓冲区,我会执行 :wa,并且在保存最后一个缓冲区后,我的 autocmd 只调用一次。
有什么办法吗?
其实这个插件已经够聪明了,如果可能的话,它会在后台启动ctags,但无论如何这有点烦人。
最佳答案
一种没有自动命令的方法:
function! MyFunction()
"" Save all buffers.
bufdo wa
"" Run your command once.
... your command ...
endfunction
nnoremap ,wa :call MyFunction()<CR>
推送
,wa
在正常模式下(不带冒号),您的所有缓冲区都将被保存,稍后它将运行您的命令。编辑 : 修改函数返回上一个缓冲区,因为
bufdo
改变它:function! MyFunction()
"" Save number of current buffer.
let l:current_buffer = bufnr("%")
"" Save all buffers.
bufdo wa
"" Bufdo probably changed the buffer, so return to where we were before running previous command.
execute "buffer " . l:current_buffer
"" Run your command once.
... your command ...
endfunction
关于vim - 自动命令在保存多个文件后仅执行一次 (:wa ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8616046/