将文本从一个vim缓冲区发送到另一个



设置:具有多个选项卡、窗口和缓冲区的Vim会话。

目标:Make-Ex命令,用于将所选文本从活动缓冲区发送到会话中的另一个缓冲区(最好是自动完成)。我的意思是,文本被附加到目标缓冲区末尾。

示例:假设您在一个名为apple的缓冲区中,而另一个选项卡中有另一个名称为banana的缓冲区。您高亮显示要发送到banana的文本(例如,一行中有文本"asdf"),然后键入:'<,'>append ban<TAB>,vim自动完成到:append banana的文本。按回车键后,vim从apple中剪切字符串"asdf",并将其附加到banana的末尾。

我最接近的是:'<,'>!cat >> banana;然而,只有当banana和apple在同一个工作目录中,并且它无法使用现有的缓冲区名称自动完成时,这才有效。

有没有一种方法可以构造一个vim脚本/viml函数来实现这一点?

类似的东西?

function! Append(l1, l2, buffer)
  let currentBuffer = @%
  let currentRegister = @z
  execute a:l1 . "," . a:l2 . 'y z'
  execute "buffer " . a:buffer
  normal G"zp<C-O>
  let @z = currentRegister
  execute "buffer " . currentBuffer
endfunction
command! -nargs=1 -complete=buffer -range Append call Append(<line1>, <line2>, <f-args>)

我们记住当前缓冲区和z寄存器的当前值,因为我们将使用它进行扬卡;我们猛拉,然后切换缓冲区,到底部粘贴;然后一切都恢复原状。-nargs=1 -complete=buffer为您提供缓冲区名称的自动补全功能。

最新更新