gvim:将内容轻松复制到系统剪贴板

27

我在Ubuntu 10.10上使用gVim,想要将文本复制(yank)到系统剪贴板中,以便在其他应用程序中使用。

使用"+y可以实现该功能。但是我想使用y来完成这个操作。

我试图将y映射为"+y,但这样yy就不能正常工作了(因为它会产生"+y"+y)。

我还尝试过 :set clipboard=unnamed 但这只能实现反向操作:我可以用p粘贴系统剪贴板中的文本。


我只是使用不同的映射来处理剪贴板,并保持“y”命令的正常功能。 - Matteo Riva
如果有些人不清楚,"+y的意思是你需要输入",+,y("是寄存器符号,+是剪贴板寄存器,y是yank) - Wadih M.
5个回答

16

你尝试过使用这个命令进行映射吗:

noremap y "+y

这个映射存在一个严重的错误:它将在正常、可视和操作挂起模式下映射y,而您只需要正常和可视模式。请使用以下内容:

nnoremap y "+y
vnoremap y "+y

还可以尝试使用set clipboard=unnamedplus(至少需要vim-7.3.74)。set clipboard=unnamed两个方向都有效,但它设置了“鼠标”(*)寄存器,该寄存器不同于剪贴板寄存器(+)。


12
大多数在线解决方案只是告诉你将y映射到"+y。但有时问题在于"+y甚至都无法正常工作。您需要检查您的vim编译了哪些功能。
请尝试以下步骤:
  1. 打开终端,运行vim –-version | grep xterm_clipboard
  2. 检查xterm_clipboard前面的符号,如果是+(加号),则转到步骤4。
  3. 如果是 - (减号),运行sudo apt-get install vim-gnome,然后运行sudo update-alternatives –config vim,在列表中选择vim.gnome(您应该使用与您的系统相对应的正确命令)。再次运行命令vim –-version | grep xterm_clipboard,现在您应该能够得到+(加号)。
  4. 检查您的系统剪贴板是否使用vim的+(加号)或*(星号)寄存器,这取决于您使用的操作系统,有时它们是等价的。如何检查?只需复制一些随机文本,然后打开vim并键入:reg,检查哪个寄存器显示您刚刚复制的字符串。如果是+(加号),则将set clipboard=unnamedplus添加到您的.vimrc中。如果是*(星号),则添加set clipboard=unnamed
  5. 测试一下。在vim内部复制一些内容,然后键入:reg检查系统剪贴板是否已更改。如果是,则当您在vim之外粘贴时,您将获得该寄存器中的任何内容。

@CHID 很高兴能够帮助到你 - Rui Liu
1
对我有用,谢谢。但是第三步的命令是做什么的?(为什么它有效?) - Daniel Que

4

我和你有着同样的想法,但我已经这么做了好几年。

nnoremap yy yy"+yy
vnoremap y ygv"+y

请注意,现在的yy命令有两个作用:首先像平常一样复制到寄存器,然后再复制到"寄存器(系统剪贴板)。y命令也是如此。这是因为我想保留Vim的多重剪贴板功能。
对于从系统剪贴板粘贴,我以前使用noremap gp "+p(全局粘贴),但现在我使用优秀的插件Yankring。

2

可视模式下选择一些文本,它将被插入到系统剪贴板中(您可以通过鼠标中键粘贴来使用它,我无法记住确切的名称)。

如果您设置了set mouse=a,则可以像在许多其他应用程序中一样使用鼠标进行可视选择。


由于某种原因,在Firefox的jupyter笔记本单元格中,使用鼠标中键复制“可视选择”文本的功能对我不起作用。在"+y之后粘贴可以解决该问题。 - bli

0
在我的情况下,有时我可以从gvim复制到系统剪贴板,有时则不行。虽然我找到了一个解决方法,但我并不理解其中的问题所在。如果我在另一个应用程序(例如记事本,因为我使用的是Windows 7)中复制文本,那么我就可以从gvim中复制文本并将其粘贴到其他地方。看起来我需要每次从gvim中复制时都这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接