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

rip*_*234 116 vim clipboard x-server

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

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

Ham*_*ner 92

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


这实际上有两种选择:

"+y
Run Code Online (Sandbox Code Playgroud)

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

"*y
Run Code Online (Sandbox Code Playgroud)

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

请注意,"*"+双向工作。因此,如果您在另一个应用程序中选择了一些文本,则可以使用将其粘贴到 vim 中"*p,如果您复制了一些文本(例如,使用 Ctrl-C),则可以使用"+p.

  • @Tshepang 它不适用于腻子。我该怎么办 ? (2认同)
  • 大家好,如何输入“+y?我应该在可视模式下还是在命令模式下输入?愚蠢的事情,但我无法弄清楚。 (2认同)

And*_*cey 51

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

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

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

  • @LoopSpace 用于多行选择,当启用 `set nu` 时,它也会复制行号。所以你可能想用一些快捷方式切换行号或在每次选择之前运行 `:set nonu` 命令 (2认同)

Rei*_*eid 41

如果你使用 vim >=7.3.74,那么你实际上可以把它放在你的 vimrc 中:

set clipboard=unnamedplus
Run Code Online (Sandbox Code Playgroud)

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

但是,我发现这种行为相当烦人,因为诸如d将它们操作的文本放入默认缓冲区之类的命令,例如,这意味着我无法快速dd粘贴来自互联网的一行。

  • + 是剪贴板寄存器 (2认同)
  • 关于你的最后一点,`dd` 的意思是“剪一行”,所以这将是预期的行为。在极少数情况下,当您想真正将一行删除而被遗忘时,`"_dd` 可以解决问题。 (2认同)
  • 也正如 @HamishDowner 在他的回答中指出的那样:仅当“vim --version”指示您具有“+xterm_clipboard”功能时,以下内容才有效。如果没有,您将必须安装额外的软件包或重新编译 vim 添加该功能。 (2认同)

Ber*_*tek 15

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

nnoremap <C-y> "+y
vnoremap <C-y> "+y
nnoremap <C-p> "+gP
vnoremap <C-p> "+gP
Run Code Online (Sandbox Code Playgroud)


And*_*ann 7

按住 SHIFT 键并用鼠标选择文本进行复制。

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

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

在此处输入图片说明

  • 那是行不通的。 (2认同)

小智 7

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

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard
Run Code Online (Sandbox Code Playgroud)

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

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard
Run Code Online (Sandbox Code Playgroud)

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


rip*_*234 6

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

"+y
Run Code Online (Sandbox Code Playgroud)

非常直观。


cra*_*2be 5

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

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

  • @ripper234:如果您使用 gvim,这将不起作用。正如 crazy2be 所说,这个功能来自你的终端模拟器。 (2认同)