我喜欢vim,但一个常见的问题是:
拉起一条线 去你想粘贴的地方 删除已有内容 粘贴你的yank,却发现它粘贴了你刚刚删除的内容
显然,工作流是先删除,再删除。但如果我不这么做就太好了。有人有诀窍吗?vim是否有一个工作良好的粘贴缓冲区,或者是否有一个我可以更改的.vimrc设置?
我喜欢vim,但一个常见的问题是:
拉起一条线 去你想粘贴的地方 删除已有内容 粘贴你的yank,却发现它粘贴了你刚刚删除的内容
显然,工作流是先删除,再删除。但如果我不这么做就太好了。有人有诀窍吗?vim是否有一个工作良好的粘贴缓冲区,或者是否有一个我可以更改的.vimrc设置?
当前回答
如果您是一个恶意用户,您可以考虑重新映射X,以实现与“_d”等价的功能。然而,完善实现对我来说有点棘手。尽管如此,我还是发现
(define-key evil-normal-state-map "X" 'evil-destroy)
(define-key evil-visual-state-map "X" 'evil-destroy)
(evil-define-operator evil-destroy (beg end type register yank-handler)
"delete without yanking text"
(evil-delete beg end type 95 yank-handler)
)
积分很好。例如,输入XX将类似于dd, X$对于d$, X0对于d0,等等……
如果你好奇它是如何工作的,“95”代表“_寄存器”,所以它只是重新路由你的删除调用,就好像“_已经被按下了寄存器。
其他回答
另一种可能性如下:
像平常一样拉你的线 切换到你想要粘贴的位置,进入可视线条模式(V) 选择要替换的行 按p粘贴你的行。
这还有一个额外的好处,即缓冲区与被替换的内容进行了“交换”,我认为这非常方便
我发现所有这些组合键都很麻烦。相反,我编写了一个函数来切换vim的“副作用”行为,即从删除操作覆盖缓冲区。这样你就可以关闭它,自由删除,然后在你完成后切换回来。
在这里可以看到我的答案:https://stackoverflow.com/a/12649560/778118
使用它只需把它放在你的。vimrc
传递到_寄存器,黑洞。
删除一行而不将其插入寄存器:
"_dd
请参见:帮助寄存器。
这可能是最安全的,如果你想要一遍又一遍地粘贴某个东西,把它拉到一个“命名”寄存器中。
"aY
猛拉一根线到收银台。用“ap”粘贴。
你可以使用寄存器:"<register><command> .
例如:
这将把一行插入寄存器a,删除另一行,然后粘贴寄存器a
"ayy` (move) `dd"aP
默认情况下,所有的yank和delete操作都写入未命名寄存器。然而,最近的yank和最近的delete总是存储在有编号的寄存器中(分开)。寄存器0保存最近的yank。寄存器1-9保存了最近的9个删除(其中1是最近的)。
换句话说,delete覆盖了未命名寄存器中最近的yank,但它仍然存在于0寄存器中。在其他答案中提到的黑洞寄存器技巧(“_dd)之所以有效,是因为它可以防止覆盖未命名的寄存器,但这不是必要的。
你可以使用双引号引用一个寄存器,所以可以像这样粘贴最近拉出的文本:
"0p
这是一个很好的参考:
http://blog.sanctum.geek.nz/advanced-vim-registers/