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


11

我正在学习喜欢vim,但是尚未完全接受的一件事是复制和粘贴情况。在麻瓜文本编辑器中,我将Ctrl- C复制一段文本,然后编辑/删除,然后将文本粘贴到其他位置。然而,在VIM,我不能这样做,因为在我复制文本y,修改文本往往涉及dx这抹杀了我的原文。

有没有什么办法让dx不可复制的文本?否则,我应该如何使用这些vim功能?

Answers:


16

之前的9个猛拉保存在1通过调用的寄存器中9。您可以使用调用倒数第二个yank,使用等调用"1p上一个"2p。该命令:reg显示可用于粘贴的寄存器。

如果您想要拉动更长的时间,请使用字母寄存器

有关与混响相关的命令比较晦涩,请从:help "手册中的开始阅读。


2
此外,寄存器0包含最后被拉动的文本(与删除相对)。因此,请回到原始问题,您可以使用y,继续编辑包括dx,然后使用"0p
Nefrubyr将其

@Nefrubyr,您在上面的评论实际上是最简单的答案,但是在现有的三个答案中均未提及。也许您应该添加它?(如果可能的话,我可以。)
通配符

9

您正在谈论的命令使用所谓的“未命名”寄存器。它仅用于非常短期的使用。“我要从这里拉出来,放在那儿”之类的事情。

如果您想在进行其他操作时握住某些东西超过几秒钟,则应该使用命名寄存器。

例如," a y y将光标所在的行拖入a寄存器。除非您键入另一个涉及a寄存器的命令,否则不会意外破坏它。在几分钟,几小时甚至几天后,您可以键入" a p以将该行的被选中的副本从a光标所在的寄存器下方删除。

(要使其正常工作,您应该set viminfo='50,\"1000~/.vimrc文件中有一行,以告诉它记住诸如在Vim会话中注册内容之类的东西。然后可以在yank和put之间休假!)

有26个命名寄存器(az)。如果您使用大写字母而不是上面的字母,则将其添加到当前寄存器的内容中,而不是替换它们。因此,您可以构建一个非常复杂的东西,例如,一次注册h一件,然后使用一次将其全部放入" h p

请注意,寄存器名称是可选的。这意味着您可能已经知道许多命令,并且可以在使用命名寄存器的地方使用它们。:help registers在Vim中说出可能的想法。

另外,获得Vi杯


1

如果您需要在不更改yank寄存器的情况下使用d删除文本(例如,已经删除了其中的文本,例如在删除某些其他文本之前还没有准备好粘贴),则可以使用黑洞寄存器 _

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

实际上,我不经常使用该寄存器。与保存到通用寄存器(任何字母寄存器)相比,键击操作不会少,并且如果保存到通用寄存器,至少,在覆盖寄存器之前,已删除的行仍然可用,如果需要出现了。

如果你倾向于忘记使用时删除另一个寄存器,可以定义一个包装宏dd比如像这样::noremap dd "add


0

正如对(当前)已接受答案的注释中所指出的那样,执行此操作的规范方法是使用寄存器零("0)。寄存器0始终包含最后一个键,并且不会被d和覆盖x,因此"0p无论您进行了什么编辑,始终将您要拖动的内容放入。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.