有谁知道在不将选择放置在默认寄存器中的情况下粘贴视觉选定区域的方法?

我知道我可以通过始终从显式寄存器粘贴来解决问题。但是键入“xp 而不是 p

最佳答案

"{register}p 不会像你描述的那样工作。它将用寄存器的内容替换选择。您将不得不执行以下操作:

" I haven't found how to hide this function (yet)
function! RestoreRegister()
  let @" = s:restore_reg
  return ''
endfunction

function! s:Repl()
    let s:restore_reg = @"
    return "p@=RestoreRegister()\<cr>"
endfunction

" NB: this supports "rp that replaces the selection by the contents of @r
vnoremap <silent> <expr> p <sid>Repl()

只要您不使用具有非 nore vmap 到 p 的插件,并且期望寄存器被覆盖,这应该没问题。

此代码可用作脚本 there 。 Ingo Karkat 还定义了一个 plugin 来解决同样的问题。

关于vim - 如何在不覆盖寄存器的情况下粘贴,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/290465/

10-14 01:27