我喜欢vim,但一个常见的问题是:
拉起一条线 去你想粘贴的地方 删除已有内容 粘贴你的yank,却发现它粘贴了你刚刚删除的内容
显然,工作流是先删除,再删除。但如果我不这么做就太好了。有人有诀窍吗?vim是否有一个工作良好的粘贴缓冲区,或者是否有一个我可以更改的.vimrc设置?
我喜欢vim,但一个常见的问题是:
拉起一条线 去你想粘贴的地方 删除已有内容 粘贴你的yank,却发现它粘贴了你刚刚删除的内容
显然,工作流是先删除,再删除。但如果我不这么做就太好了。有人有诀窍吗?vim是否有一个工作良好的粘贴缓冲区,或者是否有一个我可以更改的.vimrc设置?
当前回答
你可以使用寄存器:"<register><command> .
例如:
这将把一行插入寄存器a,删除另一行,然后粘贴寄存器a
"ayy` (move) `dd"aP
其他回答
传递到_寄存器,黑洞。
删除一行而不将其插入寄存器:
"_dd
请参见:帮助寄存器。
这可能是最安全的,如果你想要一遍又一遍地粘贴某个东西,把它拉到一个“命名”寄存器中。
"aY
猛拉一根线到收银台。用“ap”粘贴。
对于你的具体问题,你能不能把最后两步的顺序换一下?
扬克线(相同) 搬到新地方(不变) 粘贴拉绳(第4步) 删除你不想要的行(步骤3)
当然,我通常使用命名寄存器来处理这类事情,但有时解决方案比最初想到的要简单。
我写了这个插件(洋栈.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在粘贴历史中来回循环。
您还可以尝试以下脚本:ReplaceWithRegister at vim.org/scripts/
另一种可能性如下:
像平常一样拉你的线 切换到你想要粘贴的位置,进入可视线条模式(V) 选择要替换的行 按p粘贴你的行。
这还有一个额外的好处,即缓冲区与被替换的内容进行了“交换”,我认为这非常方便