在使用vim和xclip时,如何将内容复制到剪贴板?

18

我在Ubuntu上使用vim 7.2 (-clipboard -xterm_clipboard ...)。你可以看到它不支持剪贴板。因此,我想编写一个小的vim脚本,使用xclip工具将可视选择文本复制到剪贴板中。

你知道xclip工具是这样工作的:

echo 'hello' | xclip -selection clipboard      #it copies 'hello' into clipboard

Vim可以运行shell命令,因此我想将可视化选定的文本复制到“where”而不是“hello”,但我不知道如何结合xclip和vim。你能帮我实现吗?

感谢您的时间!

2个回答

40

你是否正在使用操作系统提供的vim?如果是,则vim-tinyvimvim-nox软件包不支持剪贴板,但在vim-lesstiffvim-gtkvim-gnome中具有该功能。

如果你坚持按照自己的方式操作,

:'<,'>w !xclip

将当前选定的行发送到xclip,然后

:call system('xclip', @0)

将最后一次复制的内容发送到xclip。


1
除了回答之外,指出可能是使用错误的软件包才是真正的问题,这一点值得加1分。 - Daniel DiPaolo
是的,我正在使用Ubuntu 10.04提供的分发版vim。 - Nyambaa
谢谢 ephemient,我试过像这样:":'<,'>w !xclip -selection clipboard" ,正如你所说的,它会将整行复制到剪贴板中。如何只复制选定的文本而不是整行呢? - Nyambaa
@Nyambaa:尝试切换到分发提供的“vim-gnome”或先进行复制。在vimscript中处理按字符、按行和按块选择是非常棘手的。 - ephemient
6
我需要进行可视化选择,输入:w !xclip -selection clipboard - Kris
显示剩余3条评论

5

对于我来说,通过SSH,Vim无法将内容复制到*+寄存器,即使:echo has('clipboard')的输出值为1,其他X程序仍然可以使用。我的解决方法是添加一个映射,使用寄存器将内容复制到xclip中:

vnoremap <silent><Leader>y "yy <Bar> :call system('xclip', @y)<CR>

我选择文本,按下\y,它就会出现在我的本地剪贴板上。你可以更改它使用的寄存器,例如使用"cy@c将其更改为“clipboard”寄存器。


这里发生的疯狂事情是:在执行此操作后,我可以使用“中键单击”将复制的行粘贴到我的本地计算机上,但需要一段时间。似乎实际获取内容的时间是在我点击粘贴时而不是复制时。当进行其他操作(例如关闭浏览器选项卡)时,也会出现类似情况。只需在完成远程剪贴板内容后选择其他文本即可解决此问题。 - fiatjaf
一个 :vmap 命令显示 v ,y * "yy | :call system('xclip', @y)<CR>。剪贴板内容不受影响。编辑:如果我将 'xclip' 更改为 'xclip -sel clipboard',它将按预期工作。 - Tony

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