如何简化Vim中的“复制和粘贴”?

时间:2012-01-21 23:09:43

标签: vim editor

我发现在VIM中复制和粘贴的过程非常棘手:

  • 视觉模式
  • ý
  • p(或shift p)
  • 插入模式

如果您错误地使用了“删除”键,您丢失了内容(由您删除的字符替换),您必须重新复制它!< / p>

我正在研究vim几个月,我喜欢它,但我讨厌复制和粘贴,有一种方法可以简化它吗?还是一些替代方案?

谢谢

8 个答案:

答案 0 :(得分:16)

Vim会保留您在numbered registers中删除的最后9个删除列表。因此,"0p会粘贴您最近被抓取的内容,"1p将粘贴您删除或更改的第二个最新内容(请注意,这不包括简单抽取的文本),依此类推寄存器2-9。

如果你想使用超过最近9个被删除的项目,或者如果你想要一个简单的方法来访问以前的yanks,我会推荐yankring插件,除其他外,它可以让你看到你的最后100个和使用:YRShow命令选择要粘贴的那个。

最后,如果要在不离开插入模式的情况下粘贴,可以使用Ctrl-R插入任何寄存器的内容。因此,在插入模式下,键入<Ctrl-R>"会插入未命名的寄存器"的内容(当没有指定寄存器时,这是放置文本的位置)。

答案 1 :(得分:11)

虽然不完全“简化”,但您可以选择将文本复制到与默认情况下删除的文本不同的寄存器中。这样可以防止您因意外删除内容而丢失您所复制的内容。

要复制到注册a(作为示例),您将执行以下操作:

a y [移动命令]

然后粘贴您的文字:

a p

你还可以做一件事。如果要在插入模式下粘贴,可以按 ctrl + o ,然后输入粘贴命令(例如上面提到的寄存器粘贴命令)。 ctrl + o 命令相当于按 esc ,但对于一个命令。阅读更多相关信息here

最后,您总是可以选择编写vim脚本来根据自己的喜好更改默认行为(或者找一个插件,例如yankring)。


<强>更新

基于与kellogs的评论中的对话,我决定研究如何使用任何寄存器进行复制/粘贴,但是在可视模式下进行复制命令(更容易直观地看到你正在抓取的内容) 。事实证明这是可能的。

要复制到注册a,但是在可视模式下:

v (进入可视模式)

然后你做同样的事情,但先做移动命令:

[移动命令] a y (通过移动命令突出显示您的选择,然后进入注册a)。

粘贴按照 UPDATE 上面列出的正常方式完成。

答案 2 :(得分:7)

当你删除某些内容时,Vim并没有完全丢弃被删除的文本,它只是覆盖"注册。最后抽取的文本始终存储在注册表0中,因此您可以在工作流程中将p替换为"0p,或者更好地将其映射到,p并使用它:< / p>

nnoremap ,p "0p
xnoremap ,p "0p

另一种方法是丢弃已删除的文本(将其删除到黑洞注册_):"_dd"_x等等。我个人使用,d映射:

nnoremap ,d "_d
xnoremap ,d "_d

在这种情况下,Vim不会覆盖任何寄存器。

第三是使用字母寄存器,正如@Jason Down建议的那样。

答案 3 :(得分:2)

当我不想更改模式时,我只需使用系统剪贴板进行复制和粘贴。

或者我使用CTRL-Y,如果我只是复制上一行中的字符。

如果要从缓冲区中的其他位置复制内容整行,请键入前几个字符并使用CTRL-X CTRL-L

有关详细信息,请参阅:

答案 4 :(得分:2)

对我来说,最简单的解决方案是创建一个关键的组合映射,以模态方式切换或删除此删除副作用。

我的脚本到位后,我输入了,我处于“无副作用”模式,因此删除文本对我的缓冲缓冲区没有任何影响,所以我可以自由而有效地删除 - 粘贴所有我喜欢的。

然后,当我完成后,我再次输入,vim将恢复其默认行为,并带有删除键副作用。

我觉得这个解决方案很理想,因为每次我想复制粘贴时都不需要考虑缓冲区。请看这里的脚本:

vim toggling buffer overwrite behavior when deleting

答案 5 :(得分:1)

没有什么可以简化的 - 这就是Vim的工作方式。好吧,或多或少。

但是,关于您的删除问题(因此,替换注册表的内容) - 您可以使用YankRing。它为Vim的抽奖/粘贴操作提供了一些“用户友好性”。


工作原理?

您转到第一个行,并将其拉出(在Windows术语中为“copy”)。然后你去第二个一行并且也是这样。然后你去了第七行并且也抽出那一行。

然后你去......任何地方,粘贴(!)。你得到最后一行(第七)行。按快捷键,最后一个粘贴将替换为上一个粘贴(第二个行)。再次...... 第一个行:)

所以,通过这种方式,你真的不必担心丢失你的被拽的内容,这是我不知道你的主要问题。

答案 6 :(得分:1)

与普通文本编辑器(如Gedit)相比,Vi(和Vim)的工作方式非常不同。它也有一个非常陡峭的学习曲线。如果您想学习一些基本命令,请从这个交互式教程开始。

然而,回答你的问题。系统剪贴板的内容可以通过加号寄存器访问。因此,要从系统剪贴板中粘贴一些内容,您可以在“正常”模式下按:“+ p(不是同时,而是一个接一个)。

答案 7 :(得分:0)

事情,这里是你不应该“返回插入模式”。

编辑(yanking,删除,替换等)在正常模式下完成,插入模式仅用于键入文本。

如果您处于插入模式并希望重复使用文档中其他位置的某些文本,则可以点击:

  • <C-n><C-p>插入以光标左侧字符开头的字词
  • <C-x><C-l>插入以光标左侧字符开头的行