2009-10-13 80 views
10

我使用vim(实际上是windows上的gvim)作为我的主要文本编辑器。在我的工作流程中,我必须将句子复制到/从各种外部源,因此我使用剪贴板=未命名来节省我的击键(p而不是“* p)。
我从外部源复制文本,我想粘贴它超过了两个 vim中的不同地方,我标记第一个(v),然后用p粘贴它。问题是,在这一点上,我失去了原始缓冲区,无法将它粘贴到第二个地方。它不存在于未命名的缓冲区,*缓冲区或已编号的缓冲区中。我的猜测是粘贴选择是将“粘贴”文本放在未命名的缓冲区中。
如何将我的原始字符串粘贴到两个位置?即防止它从缓冲区中丢失。从外部源复制粘贴

谢谢。

+0

shift + insert(在插入模式下) – nilon 2017-05-29 18:54:43

回答

6

试试这个:

:vmap p "_xP 
  • vmap手段,使该只适用于视觉模式的映射。
  • p是创建映射的关键。
  • "_是黑洞登记册。这用于任何想要删除文本而不影响任何寄存器的情况。
  • xP表示删除选定的文本,然后粘贴在得到的光标位置之前。
0

我不知道如何在Windows上做到这一点。使用KDE,剪贴板有一个可供您选择的历史记录,因此您可以执行粘贴,从剪贴板中选择上一个选择,然后粘贴到新位置。这就是说,它听起来像是让它只在一个位置有意义,然后编写一个脚本来接受输入并创建你需要的输出。你能详细说明你想要完成的是什么吗?

+0

我试图从不同的应用程序复制一行并将其粘贴到vim中的两个地方。尽可能简单。 – Mosh 2009-10-13 21:08:07

+0

这就是它的机制,是的。我问你是否应该退后一步,思考你正在努力实现的任务 - 是否有更好的方法,不需要重复剪切粘贴? – retracile 2009-10-13 21:37:46

+0

我迷路了。我需要在两个不同的地方粘贴一段文字,有什么想法? – Mosh 2009-10-14 05:17:22

1

你可以建立一个映射,以减轻你的痛苦:

:vmap <F5> "zxP 

这将删除视觉选定的文本,但把它放在一个不同的寄存器,所以剪贴板不受影响。将<F5>更改为最适合您的任何内容。

0

检查'guioptions'选项的值。确保未设置'a'标志。另外,请检查“剪贴板”选项并确认未设置“未命名”或“自动选择”标志。

:set go-=a 
:set clipboard-=unnamed 
+0

谢谢您的回答,但我似乎无法正确实施。再次,我的工作顺序是复制外部程序,标记在Vim上被替换的文本。在Vim中再标记一些文本,然后我无法粘贴复制的文本。我试着粘贴“+ p,但是我得到了相同的结果,我的答案错了吗?(我使用剪贴板=未命名)。 – Mosh 2009-10-25 05:41:19

+0

所以我在我的笔记本电脑上安装了Vim,并检查了我的第一个答案,它不起作用。我编辑了我的答案,并提供了一个新的建议,我猜这是'unnamed'标志的出现,会给你带来麻烦 – 2009-11-06 02:33:26

1

我不知道如果我误解你,但我想,你在做什么,我都在做,与+落注册没有问题。

我的工作流程:

  1. 复制一个句子在外部应用程序(如浏览器)
  2. 视觉选择vim的句子,并“+ Pp(剪贴板取而代之=未命名的集合)
  3. 直观地选择另一个句子,并用替换为“+ p

很遗憾,当第二次粘贴时,必须从+寄存器明确粘贴。因此,我建议的映射对于p/P,而不是使用剪贴板=无名

nmap p "+p 

尝试使用

:registers 

看到不同的寄存器的内容。

+0

谢谢你的回答,我正在使用Windows机器,所以当我检查:我没有+寄存器,而且没有寄存器包含我从外部应用程序复制的文本(甚至没有*寄存器,它被我复制的文本覆盖)。 – Mosh 2009-10-25 18:15:22