如何将文本从vim复制到外部程序?


84

我正在尝试从vim复制粘贴一些文本。我正在做v进入可视模式,然后在选择块后进行y

似乎会将文本复制到vim的剪贴板中,因为p会将其粘贴。但是在另一个程序(例如Chrome)中,右键单击->粘贴不会粘贴正确的文本。如何将文本复制到正确的剪贴板?

Answers:


62

仅当vim --version表明您具有+xterm_clipboard功能时,以下内容才有效。如果没有,您将必须安装额外的软件包或使用添加的功能重新编译vim。


实际上,有两种选择:

"+y

复制到“常规”剪贴板缓冲区(以便您可以使用Ctrl + V粘贴,右键单击并选择“粘贴”等),同时

"*y

复制到X11选择-您可以使用中键从此缓冲区粘贴。

需要注意的是"*"+工作两者兼得。因此,如果您在另一个应用程序中选择了一些文本,则可以使用将该文本粘贴到vim中"*p,如果您已经复制了一些文本(使用Ctrl-C),则可以使用粘贴到vim中"+p


@Tshepang它不能从腻子中起作用。我该怎么办 ?
Rahul Patil

@RahulPatil我不知道;也许会问一个单独的问题,也许是在超级用户上(因为它是Windows工具,所以在那儿会受到更多欢迎)。
tshepang 2013年

@RahulPatil-如果使用的是腻子,那么您是在远程服务器上而不是在本地计算机上编辑文件。通常,远程服务器不会知道本地计算机上的剪贴板。如果您使用的是Linux桌面,则可以使用X转发进行ssh(前提是您已在服务器上安装了X库),但是由于腻子在Windows上运行,因此您没有X运行,因此您无法转发它。
Hamish Downer

1
大家好,如何输入“+ Y我应该在可视模式或在命令模式下键入它愚蠢的事情,但我无法弄清楚??
Alind Billore

@AlindBillore:在命令模式下。从字面上看,按键shift'然后shift=接着y(而不是一次,一前一后,当然,除了移位)。
Reid

31

如果您使用的是vim> = 7.3.74,那么您实际上可以将其放在vimrc中:

set clipboard=unnamedplus

+默认情况下,它将自动使用缓冲区(系统剪贴板)。然后要拉动(复制),只需使用常规y命令,等等。

但是,我发现这种行为非常令人讨厌,因为诸如命令之类d的命令会将其操作的文本放入默认缓冲区中,这意味着我无法快速执行操作dd并从互联网上粘贴一行。


2
+是剪贴板编辑器
Kit Ho

1
关于您的最后一点,dd意思是“剪一条线”,所以这将是预期的行为。在极少数情况下,当您想删除一条线而被遗忘时,"_dd就可以解决问题。
user7089 2014年

也正如@HamishDowner在其答案中指出的那样:仅当vim --version表明您具有+xterm_clipboard功能时,以下内容才有效。如果没有,您将必须安装额外的软件包或使用添加的功能重新编译vim。
rudolph17年

24

按住Shift键并使用鼠标光标选择文本。
文本将被复制到剪贴板。

这也适用于剪贴板粘贴到vim中。

明确地说,这适用于vim在终端中运行xterm


您是在选择文本时按住Shift键吗?我就是这样做的xterm
nozimica 2011年

@nozimica:是的。
Loop Space

这个答案应该有更多的赞誉……
whoan

@LoopSpace用于多行选择,set nu启用后也会复制行号。因此,您可能希望使用某些快捷方式切换行号或:set nonu在每次选择之前运行命令
Steven Pribilinskiy

在MAC上,按住Option键并使用鼠标光标选择文本
abreschi

10

我发现标准"+gP"+y命令很难使用。因此,我已重新映射Ctrl-Y为拖入剪贴板并Ctrl-P从剪贴板粘贴。将此添加到.vimrc

nnoremap <C-y> "+y
vnoremap <C-y> "+y
nnoremap <C-p> "+gP
vnoremap <C-p> "+gP

5

没关系,我找到了答案-它写在vim的菜单上。

"+y

非常直观。


您正在使用gvim吗?
nozimica

@ nozimica-是的
ripper234'5

1
在xterm或X下类似的终端仿真器中运行的vim中也可以使用该+xterm_clipboard功能(如果vim是使用该功能编译的)。
吉尔斯

3

只是添加一个非特定于Vim的答案:您可以Ctrl+Shift+C用来复制到Ubuntu中的系统剪贴板(如果该功能是由终端仿真器提供的,则gnome-terminal提供该功能)。Ctrl+Shift+V粘贴到另一个终端窗口,常规Ctrl+V粘贴到GUI应用程序。

另外,如果您在终端中选择文本,然后单击鼠标中键,将从X11剪贴板粘贴该文本。


由于某种原因,它不起作用。只需在可视模式下选择,使用ctrl-shift-C复制,然后使用Ctrl-shift-V粘贴到另一个应用程序中即可?文本不会为我复制。
ripper234

2
@ ripper234:如果使用的是gvim,则此方法不起作用。正如crazy2be所说,此功能来自您的终端仿真器。
里德(Reid)

@ ripper234:1)它是您的终端仿真器提供的功能(gnome-terminal提供了该功能),2)Ctrl + Shift + V粘贴到终端上,GUI应用程序仍然照常使用Ctrl + V。我将编辑答案以使其更加清晰。
crazy2be

如果您使用shift-control mousedrag-选择文本,则从一个缓冲区窗口复制粘贴变得容易。
斯蒂芬,

2

默认情况下,如果您安装vim的精简版,则+xterm_clipboardvim --version | grep xterm)上将不具有该功能,这是在vim外部使用*+寄存器所必需的。

要启用它,您必须自己编译vim或安装预启用的vim版本。我用VIM-GNOME: sudo apt-get install vim-gnome。如果执行vim --version | grep xterm,您将看到现在+xterm_clipboard

现在,尝试复制到+*,它应该可以工作。


2

当我检查我的vim不支持剪贴板时:

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

我安装了vim-gnome,然后再次检查

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

现在,我可以分别使用“ + y”和“ + p”进行复制和粘贴了。



0

只是添加一下,如果有任何效果,请尝试切换包装vim的终端(如果您从终端使用vim)。我发现,例如,从gnome-terminal可以访问guake无法访问剪贴板。

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.