it-swarm.cn

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

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

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

91
ripper234

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


实际上,有两种选择:

"+y

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

"*y

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

请注意,"*"+可以同时使用。因此,如果您在另一个应用程序中选择了某些文本,则可以使用"*p将其粘贴到vim中;如果您已经复制了某些文本(例如,按Ctrl-C),则可以使用"+p

70
Hamish Downer

如果您使用的是vim> = 7.3.74,则可以将其实际放入vimrc中:

set clipboard=unnamedplus

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

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

35
Reid

按住shift键键,然后用鼠标光标选择文本。
文本将被复制到剪贴板。

这对于粘贴from剪贴板到vim也有效。

需要明确的是,这适用于在诸如vim之类的终端中运行的xterm

31
Andrew Stacey

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

nnoremap <C-y> "+y
vnoremap <C-y> "+y
nnoremap <C-p> "+gP
vnoremap <C-p> "+gP
11
Bernhard Heijstek

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

"+y

非常直观。

6
ripper234

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

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

4
crazy2be

按住SHIFT键,然后用鼠标选择要复制的文本。

然后使用CTRL + v粘贴到其他程序中。

在我的Ubuntu 16.04上的终端上工作。不确定gvim和其他系统。

enter image description here

4
Andrzej Rehmann

当我检查我的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”进行复制和粘贴了。

3
Ashutosh Tripathy

默认情况下,如果您安装vim的精简版,那么您将没有+xterm_clipboard功能在(vim --version | grep xterm),这是使用*+在vim之外注册。

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

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

2
laughing_man

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

0
gc5