vim: 我可以*仅* y 执行复制吗?

vim: 我可以*仅* y 执行复制吗?

我正在学习喜欢 vim,但我还没有完全接受的一件事是复制和粘贴情况。在麻瓜文本编辑器中,我会Ctrl复制C一段文本,然后编辑/删除,然后将文本粘贴到其他地方。然而在 vim 中我不能这样做,因为在我用 复制文本后y,修改文本经常涉及到d和 ,x这会删除我的原始文本。

有什么办法可以制作dx不是复制文本吗?或者说,我应该如何使用这些 vim 功能?

答案1

之前的 9 次复制保存在1通过调用的寄存器中9。您可以使用 来回忆倒数第二次猛拉"1p,使用 来回忆上一次猛拉,"2p依此类推。该命令:reg显示可用于粘贴的寄存器。

如果你想让猛拉持续更长时间,使用字母寄存器

对于更晦涩的猛拉相关命令,请开始阅读:help "手册中的 。

答案2

您所说的命令使用所谓的“未命名”寄存器。它仅适用于非常短期的使用。 “我要把这个从这里拉出来放到那里”之类的事情。

当你想在做其他事情的同时保留某件事超过几秒钟时,你应该使用命名寄存器。

例如," a y y将光标所在的行拉入寄存器a。除非您键入另一个涉及a寄存器的命令,否则没有什么会意外地破坏它。几分钟、几小时,甚至几天后,您可以键入内容," a p将该行的复制副本从a寄存器中拖放到光标所在的位置下方。

set viminfo='50,\"1000(为了让它工作得很好,你应该在你的文件中有一行~/.vimrc,告诉它记住诸如跨 Vim 会话的注册内容之类的东西。然后你可以在 yank 和 put 之间休息!)

有 26 个命名寄存器 (az)。如果将它们指定为大写而不是如上所示,则将附加到当前寄存器内容而不是替换它们。因此,您可以构建一些非常复杂的东西,例如,h一次注册一个片段,然后使用 一次性将其全部放下" h p

请注意,寄存器名称是可选的。这意味着您可能已经知道并使用许多命令来使用命名寄存器。用 Vim说话:help registers来了解一些可能性。

还,获得 Vi 马克杯

答案3

如果您需要使用 d 删除文本而不更改您的复制寄存器(例如,您已经复制了其中的文本,但在删除某些其他文本之前尚未准备好粘贴),您可以使用黑洞寄存器 _

"_dd例如,如果您这样做,当前行将被立即删除并忘记。

事实上,我不经常使用这个寄存器。它所花费的击键次数并不比保存到通用寄存器(任何字母寄存器)少,并且如果您保存到通用寄存器,至少,您删除的行仍然可用,直到您覆盖寄存器,如果需求出现了。

如果您在删除时往往忘记使用另一个寄存器,您可以定义一个包装宏,dd例如:noremap dd "add

答案4

正如(当前)接受的答案的评论中所指出的,执行此操作的规范方法是使用寄存器零("0)。寄存器零始终包含最后一次复制,并且不会被d和覆盖x,因此"0p无论同时编辑了什么内容,都始终放入您复制的内容。

相关内容