有没有人知道粘贴在一个可视选择区域的方法而没有将选择放在默认寄存器中?
我知道我总是可以通过明确的寄存器来解决问题.但是,打字是一种痛苦,"xp而不仅仅是打字p
我不喜欢用拷贝删除了所有文本的默认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
使用以下内容:
xnoremap p pgvy
这将重新选择并重新粘贴以可视模式粘贴的任何文本.
编辑:为了与"xp
你合作,你可以做到:
xnoremap p pgv"@=v:register.'y'
v:register
扩展为普通模式命令中使用的最后一个寄存器名称.
"{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还定义了一个解决同一问题的插件.
在你的 .vimrc
xnoremap p "_dP
我从类似线程的响应中找到了这个,但最初的来源是http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text.它提到了一些缺点,但它适用于我.
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
尝试在您的~/.vimrc
:
xnoremapp 'pgv"'.v:register.'y'
xnoremap
表示这仅适用于Visual
模式,不适用于Visual + Select
模式。
表示{rhs}
该xnoremap {lhs} {rhs}
设置的值作为表达式求值。
在这种情况下,我们的表达'pgv"'.v:register.'y'
是使用.
进行连结。
v:register
将在映射完成期间对要使用的寄存器求值。
的结果"xp
将评估为pgv"xy
,x
寄存器在哪里。
我被一个答案帮助这个计算器的问题:Vim的-有一个可选的寄存器前缀映射 结合贝努瓦的回答这个网页上