vim - 自动命令在保存多个文件后仅执行一次 (:wa )

标签 vim

我的插件中有用于 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/

相关文章:

vim - 如何在vim中的quickfix中忽略Make输出?

linux - 如何链接到 vim 中的另一个文件?

git - `git add` 将 ^M 添加到每一行的末尾

vim - 防止vim意外打开二进制文件?

ubuntu - 在 Ubuntu 12.04 上将 Vim 更新到最新版本

Vim 重排段落添加不需要的缩进

vim - 什么是 Vim 录音以及如何禁用它?

vim - YouCompleteMe 不可用 : dlopen. ..(更多描述)

vim - 如何制作vim :source accept different line endings?

vim - 如何在NERDTree中按扩展名过滤掉文件?