我喜欢vim,但一个常见的问题是:

拉起一条线 去你想粘贴的地方 删除已有内容 粘贴你的yank,却发现它粘贴了你刚刚删除的内容

显然,工作流是先删除,再删除。但如果我不这么做就太好了。有人有诀窍吗?vim是否有一个工作良好的粘贴缓冲区,或者是否有一个我可以更改的.vimrc设置?


当前回答

你的被拉拽的行应该仍然在寄存器0中。所以做

"0p

粘贴这一行(并随时删除)

其他回答

你的被拉拽的行应该仍然在寄存器0中。所以做

"0p

粘贴这一行(并随时删除)

" map paste, yank and delete to named register so the content
" will not be overwritten
nnoremap d "xd
vnoremap d "xd
nnoremap y "xy
vnoremap y "xy
nnoremap p "xp
vnoremap p "xp

我写了这个插件(洋栈.vim)来解决这个问题。就像Emacs给vim的杀人戒指一样。您可以删除或删除多个内容,进行粘贴,然后在删除/删除文本的历史记录中来回循环。我发现这比记住我把东西放进哪个寄存器要容易得多。

在我的.vimrc中,我有这些映射:

nmap <M-p> <Plug>yankstack_substitute_older_paste
nmap <M-P> <Plug>yankstack_substitute_newer_paste

它可以让我按ALT-p或ALT-SHIFT-p在粘贴历史中来回循环。

我使用下面的映射使删除黑洞寄存器更容易一些:

nnoremap R "_d

这样,dd变成了Rd, d美元变成了R美元。请注意,R通常会进入替换模式,但我发现我从未使用过这种模式,所以对于“真正的删除”特性来说,它是最容易记住的键。

另一种可能性如下:

像平常一样拉你的线 切换到你想要粘贴的位置,进入可视线条模式(V) 选择要替换的行 按p粘贴你的行。

这还有一个额外的好处,即缓冲区与被替换的内容进行了“交换”,我认为这非常方便