当前位置:  开发笔记 > 编程语言 > 正文

如何粘贴而不覆盖寄存器

如何解决《如何粘贴而不覆盖寄存器》经验,为你挑选了6个好方法。

有没有人知道粘贴在一个可视选择区域的方法而没有将选择放在默认寄存器中?

我知道我总是可以通过明确的寄存器来解决问题.但是,打字是一种痛苦,"xp而不仅仅是打字p



1> Jeff Lake..:

我不喜欢用拷贝删除了所有文本的默认VIM行为d,D,c,或者C到默认寄存器.

我周围得到通过映射d"_d,c"_c,等等.

从我的.vimrc:

"These are to cancel the default behavior of d, D, c, C
"  to put the text they delete in the default register.
"  Note that this means e.g. "ad won't copy the text into
"  register a anymore.  You have to explicitly yank it.
nnoremap d "_d
vnoremap d "_d
nnoremap D "_D
vnoremap D "_D
nnoremap c "_c
vnoremap c "_c
nnoremap C "_C
vnoremap C "_C



2> Benoit..:

使用以下内容:

xnoremap p pgvy

这将重新选择并重新粘贴以可视模式粘贴的任何文本.

编辑:为了与"xp你合作,你可以做到:

xnoremap p pgv"@=v:register.'y'

v:register 扩展为普通模式命令中使用的最后一个寄存器名称.


@mark``:xnoremap p'pgv"'.v:register.'y`>'``,我添加```>``恢复光标位置
@LondonRob:`g`一无所获.它提供扩展的多键命令,如`z`.例如,`go`转到缓冲区中的第n个字节,`gj`和`gk`转到下一个和前一个显示的行(当行包裹时不同于`jk`),`ga`显示光标下字符的信息, `gJ`连接没有空格的行,这里`gv`恢复了最后的视觉选择.你可以使用`:help gv`.
您对"xnoremap p pgv"@ = v:register.'y'`的建议对我不起作用.但是,这样做:`xnoremap p'pgv"'.v:register.' y'`

3> Luc Hermitte..:

"{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()\"
endfunction

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

只要您不使用具有非nore vmap的插件,并且需要覆盖寄存器,这应该没问题.

此代码在那里作为脚本提供.Ingo Karkat还定义了一个解决同一问题的插件.



4> Jason Denney..:

在你的 .vimrc

xnoremap p "_dP

我从类似线程的响应中找到了这个,但最初的来源是http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text.它提到了一些缺点,但它适用于我.



5> 小智..:

Luc Hermitte的解决方案就像一个魅力.我用了大约一个星期左右.然后我发现了一个来自Steve Losh的.vimrc的解决方案,如果YankRing是你的插件/捆绑产品阵容的一部分,它可以很好地工作:

function! YRRunAfterMaps()                                                                                                      
    " From Steve Losh, Preserve the yank post selection/put.    
    vnoremap p :YRPaste 'p', 'v'gv:YRYankRange 'v' 
endfunction  



6> mrak..:

尝试在您的~/.vimrc

xnoremap  p 'pgv"'.v:register.'y'

xnoremap表示这仅适用于Visual模式,不适用于Visual + Select模式。

表示{rhs}xnoremap {lhs} {rhs}设置的值作为表达式求值。

在这种情况下,我们的表达'pgv"'.v:register.'y'是使用.进行连结。

v:register 将在映射完成期间对要使用的寄存器求值。

的结果"xp将评估为pgv"xyx寄存器在哪里。

我被一个答案帮助这个计算器的问题:Vim的-有一个可选的寄存器前缀映射 结合贝努瓦的回答这个网页上

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有