此命令替换了我所有缓冲区中的一些文本:
:bufdo %s/some_text/other_text/ge | update
运行此命令时,当前窗口的缓冲区将更改为受:bufdo
影响的最后一个缓冲区,如:help :bufdo
中所述:
The last buffer (or where an error occurred) becomes the current buffer.
我知道可以防止缓冲区被更改,但我不记得如何。
答案 0 :(得分:2)
您可以在运行命令之前保存当前缓冲区,然后在以下之后跳转到它:
:let buf=bufnr('%') | exec 'bufdo some_command' | exec 'b' buf
答案 1 :(得分:0)
:bufdo %s/some_text/other_text/ge | update | bn
答案 2 :(得分:0)
我的ArgsAndMore plugin有一个:Bufdo
替代:bufdo
返回原始缓冲区(以及:argdo
的类似变体等。)
答案 3 :(得分:0)
" Like bufdo but restore the current buffer.
function! BufDo(command)
let currBuff=bufnr("%")
execute 'bufdo ' . a:command
execute 'buffer ' . currBuff
endfunction
com! -nargs=+ -complete=command Bufdo call BufDo(<q-args>)
参考:https://vim.fandom.com/wiki/Run_a_command_in_multiple_buffers#