无法从 vim 复制到系统剪贴板

gc5*_*gc5 69 vim command-line clipboard

正如标题中所说,我无法从 vim 复制到系统剪贴板。Viceversa 可以工作,从 vim 外部复制并粘贴p就可以了。

我已经安装了剪贴板支持,vim 版本是 7.3.429:

$ vim --version | grep clip
+clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments 
+xsmp_interact +xterm_clipboard -xterm_save 
Run Code Online (Sandbox Code Playgroud)

我有:

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

在我的.vimrc,它是在我做的时候设置的:

set clipboard?
Run Code Online (Sandbox Code Playgroud)

或者

:echo has('clipboard')
Run Code Online (Sandbox Code Playgroud)

我使用的是 Ubuntu 12.04 LTS,里面gnome-terminal有vim (但 GVim 也有同样的问题)。任何的想法?

谢谢

Raf*_*ael 109

这对我有用(Ubuntu 13.10):

将 vim 重新安装为 vim-gtk:

sudo apt-get install vim-gtk
Run Code Online (Sandbox Code Playgroud)

使用鼠标选择您想要的内容 - 然后键入以复制到剪贴板

"+y
Run Code Online (Sandbox Code Playgroud)

从剪贴板类型粘贴到 vim

"+p
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,但比较vim --version显示的输出显示,与 vim-gtk 相比,通常的 vim 安装受到很大限制。用 vim-gtk 替换 vim 不会影响任何插件。


更多信息:


cot*_*eyr 7

我将在下面留下原始答案,因为这对于搜索此问题的其他人可能很重要。

简而言之,似乎没有一个适合所有的答案,但是使用 'set clipboard=unnamedplus' '*p' 或 '+p' 之一应该可以从“系统”剪贴板工作。

'*p' 几乎肯定是你想要的。(从这里


vim 是一个 cli 程序。在 gnome-terminal(或任何终端仿真器)中使用它时,crtl+c(或任何组合键)首先由终端仿真器处理,然后是 shell,最后由程序(在本例中为 vim)处理。vim 和 ctrl+c 几乎肯定不会工作,因为 ctrl+c 会向正在运行的任务发送 SIGINT 信号。vim 使用 SIGINT 来停止其他事情,例如中止插入模式或停止搜索功能。

换句话说。Ctrl+C 从未真正传递给 VIM。SIGINT 被传递给 VIM。SIGINT 在 vi​​m 中还有其他用途,因此使用复制可能不会起作用(即使您可以强制它,也不是一个好主意)。

而是尝试坚持使用 Ctrl+Shift+C 和 Ctrl+Shift+V(还有其他的,但我相信那些将文本放入系统剪贴板)

公平地说,我对 gvim 了解不多。


小智 5

在你的 vimrc 中使用:

set mouse=a
Run Code Online (Sandbox Code Playgroud)

它将允许您使用鼠标手动选择和复制。


小智 5

除了已接受的答案之外,如果您通过 SSH 远程工作(例如,在具有要在tmux不同进程之间复制的多个窗格上),您还需要导出您的 X 显示,因为它用于在不同进程之间进行交互。您可以通过运行来设置 X 显示vimvimxterm-clipboard

export DISPLAY=:0.0
Run Code Online (Sandbox Code Playgroud)

它必须在启动之前 运行,并在您拥有的任何其他 shell 下运行。vim