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

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

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


当前回答

我发现所有这些组合键都很麻烦。相反,我编写了一个函数来切换vim的“副作用”行为,即从删除操作覆盖缓冲区。这样你就可以关闭它,自由删除,然后在你完成后切换回来。

在这里可以看到我的答案:https://stackoverflow.com/a/12649560/778118

使用它只需把它放在你的。vimrc

其他回答

我发现所有这些组合键都很麻烦。相反,我编写了一个函数来切换vim的“副作用”行为,即从删除操作覆盖缓冲区。这样你就可以关闭它,自由删除,然后在你完成后切换回来。

在这里可以看到我的答案:https://stackoverflow.com/a/12649560/778118

使用它只需把它放在你的。vimrc

传递到_寄存器,黑洞。

删除一行而不将其插入寄存器:

"_dd

请参见:帮助寄存器。

这可能是最安全的,如果你想要一遍又一遍地粘贴某个东西,把它拉到一个“命名”寄存器中。

"aY

猛拉一根线到收银台。用“ap”粘贴。

你可以使用寄存器:"<register><command> .

例如:

这将把一行插入寄存器a,删除另一行,然后粘贴寄存器a

"ayy` (move) `dd"aP
" 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在粘贴历史中来回循环。