使用:bufdo命令时如何防止更改缓冲区?

时间:2014-07-13 18:41:53

标签: vim

此命令替换了我所有缓冲区中的一些文本:

:bufdo %s/some_text/other_text/ge | update

运行此命令时,当前窗口的缓冲区将更改为受:bufdo影响的最后一个缓冲区,如:help :bufdo中所述:

The last buffer (or where an error occurred) becomes
the current buffer.

我知道可以防止缓冲区被更改,但我不记得如何。

4 个答案:

答案 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#