假设我的vim剪贴板里有单词“the”。
如果我进入了可视块模式,选择了一个单词(我们假设这个单词是"a")并粘贴。
单词“a”被替换为单词“the”,但我的剪贴板已经改变了:现在它包含单词“a”。如何更改此行为,使得在可视块模式下粘贴时不替换我的剪贴板呢?
"xyw
将"the"复制到寄存器"x"中,然后在可视模式下使用"xp
进行粘贴。寄存器"x"
不会被操作所改变。"0"
的寄存器在这里可能非常有用,因为默认复制也会进入"0"
寄存器,但在可视模式下用放置替换的文本只会进入未命名寄存器,不会修改"0"
寄存器。:help v_p
:p
和 P
操作创建映射,以在操作之前和之后保存和恢复未命名寄存器。function! SaveReg(cmd) abort
let b:saved_reg = getreg('"')
let b:saved_type = getregtype('"')
return a:cmd.":\<C-U>call RestxyzoreReg()\r"
endfunction
function! RestoreReg() abort
call setreg('"', b:saved_reg, b:saved_type)
unlet b:saved_reg
unlet b:saved_type
endfunction
xnoremap <silent> <expr> p SaveReg('p')
xnoremap <silent> <expr> P SaveReg('P')
.
不起作用,因为它是两个单独的命令,首先使用ve
进行可视选择,然后使用"0p
从寄存器0中粘贴。为了使其可重复,您可以例如记录一个宏。 - filbranden:help registers
。您可以将文本复制/粘贴到指定的寄存器中。"by
仅复制单词"the",并将其放入寄存器b
中。然后,您可以使用"bp
命令将其粘贴。
:verbose set clipboard?
的值。 - Matt