在Ubuntu上从Vim剪切到系统剪贴板

32
我正在使用Ubuntu 12.04 Beta和其中附带的Vim。我尝试使用Vim将文本文件的内容复制到Chrome浏览器中。 我已经尝试了 +* 和所有相关变体的y命令。我也尝试过使用 :set clipboard=unnamed:set clipboard=unnamedplus 命令。但它们都无法工作。 我不想使用xclip或GVim等其他工具。我尝试了xclip(在Ubuntu 12.04中不是标准包),但它也不起作用,而且需要太多工作。 如何将文本复制到剪贴板,然后在任何地方粘贴,比如Chrome浏览器?

1
vim --version 的输出是什么? - David Pope
3
在 Ubuntu(以及我尝试过的所有其他平台)中,“+y” 对我有效。 - Prince Goulash
是的,那个Beta标签让我很好奇。 - David Pope
对于Xclip,我使用了- https://dev59.com/jW435IYBdhLWcg3wvyw5 - Gattoo
我发现了解决这个问题最简单的方法:安装gvim;在命令行上运行gvim -v,以完全像vim一样打开gvim,并保持系统剪贴板功能完整。 - Gattoo
显示剩余6条评论
8个回答

29

您的Vim版本不支持X,这是访问剪贴板所必需的。默认情况下,Ubuntu提供多个版本的vim,只有GUI变体支持访问剪贴板。我总是重新编译vim源代码,这样一个单独的vim(带有gvim的符号链接等)就可以支持所有所需功能(包括:gui从命令行切换到GUI版本)。这真的非常容易做到:

# Get the compile-dependencies of vim
sudo apt-get build-dep vim
# If you haven't got mercurial, get it
sudo apt-get install mercurial
# Get the source
hg clone https://vim.googlecode.com/hg/ vim_source
# Compile it
cd vim_source
./configure \
    --enable-perlinterp=dynamic \
    --enable-pythoninterp=dynamic \
    --enable-rubyinterp=dynamic \
    --enable-cscope \
    --enable-gui=auto \
    --enable-gtk2-check \
    --enable-gnome-check \
    --with-features=huge \
    --with-x \
    --with-compiledby="Your Name <youremail@domain.com>" \
    --with-python-config-dir=/usr/lib/python2.7/config
make && sudo make install

这会将其安装在/usr/local中,因此请确保在您的PATH中将其放在/usr之前,这样它将被用来替代Ubuntu版本。


好建议,@DrAl。这会影响已经在运行的Vim吗?我不想破坏Vim。我可以为了Vim的其他好处失去剪贴板功能。 - Gattoo
1
你最终会得到两个vim:/usr/bin/vim/usr/local/bin/vim。你总是可以使用显式路径运行旧的vim。我不确定你认为可能会出现什么问题,但你可以编译任何需要的功能,而这个配置脚本将大部分内容放在其中。有关更多选项,请参见./configure --help - DrAl
我应该澄清一下我的评论:你最终会得到两个gvim:/usr/bin/gvim(来自vim-gtk)和/usr/local/bin/gvim(一个符号链接到/usr/local/bin/vim,默认情况下将以GUI模式打开,而不是名为'vim'的控制台模式)。它将支持剪贴板,无论您是否处于GUI模式(即使通过ssh进行ssh -X并在ssh客户端机器上使用X服务器也可以这样做)。 - DrAl
请注意更改存储库的URL。如果您仍想使用Mercurial,请使用https://bitbucket.org/vim-mirror/vim。如果您想更改为git,请使用https://github.com/vim/vim.git - csi
1
仓库网址和构建指令已经在Ubuntu 16.04上发生了更改。 - Cloud
显示剩余3条评论

29

vim --version 命令的输出应该类似于以下内容:

Huge version with GTK2-GNOME GUI.  Features included (+) or not (-):

而在输出中更深处,您应该看到像 +Xll: 这样的内容:

+vreplace +wildignore +wildmenu +windows +writebackup +X11 -xfontset +xim 
+xsmp_interact +xterm_clipboard -xterm_save 

这意味着你的控制台vim可以与X11剪贴板进行复制/粘贴操作。

尝试 apt-get install vim-gtk


2
这个。你应该使用vim-gtk,并考虑将set clipboard=unnamedplusset clipboard=unnamed放入你的vimrc中,以便默认寄存器也用于剪贴板操作。 - ldx
我有-x11 -xim -xsmp -xterm_clipboard -xterm_save。 这是否意味着我永远无法获得剪贴板功能? 我该如何编译vim以拥有所有好的功能? 这与beta版有关,最终版本发布时会改变吗? 我还想在ssh中使用vim,所以不需要vim-gtk。 - Gattoo
2
@Gatoo:好的,基本上你想要从源代码构建一个版本的vim,它将具有与Ubuntu通过“apt-get install vim-gtk”为您提供的相同或接近相同的功能? - sashang
+1 我和 OP 有完全相同的问题,不包括 Beta 部分。根据这篇文章,我使用 sudo apt-get install vim-gtk 安装了 vim-gtk。我的原始版本 vim 没有受到影响。它非常礼貌地接受了新安装。vim --version 现在显示所有附加的编译选项(+X11 +clipboard 等)。我不得不重新启动计算机才能使 "+yy 工作。这种 apt-get 方法确保我们通过更新管理器获得任何更新通知。如果从源代码编译,则必须自己检查更新。 - AJ Dhaliwal
云测试CI-130云测试CI-130 - Aubergine
显示剩余3条评论

8
安装vim-gnome包代替vim。它自带启用clipboard

1
我在使用Vim时没有考虑过基于Windows的模型。第一个要求是在非GUI框上工作。 它支持非GUI操作吗? - Gattoo
vim-gnome 是针对 Linux 的。我不确定它是否适用于非 GUI 系统。我还没有在服务器上尝试过它。 - dan-klasson
@dan-klasson,我刚刚在12.04上尝试了一下。它可以工作。 - mcmlxxxiii

4
你可以在vimrc中添加快捷方式。
# Copy and paste
vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa

这将允许您通过Ctrl+C复制并通过Ctrl+V粘贴。


2

2
如果您按照@DrAl的说明运行了configure,但仍无法编译GUI并且在./configure的输出中看到这个问题。
checking for X... (cached) no

然后您可能需要删除configure创建的缓存文件。

find . -name config.cache -delete

然后重新运行configuremake,再次检查src/vim --version - 现在应该显示已经包含了GUI界面。


0

我会使用文件URL在浏览器中打开文件:

file:///home/dave/some-file

不是非常优雅,但它能工作。


-1

我非常喜欢这组快捷键:

" Add shortcut for clipboard registers
noremap <leader>p "*p
noremap <leader>y "+y
noremap <leader>d "+d

这只是比每次输入“*”和“+”更简单的方法。


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