【问题标题】:Cut to the system clipboard from Vim on Ubuntu在 Ubuntu 上从 Vim 剪切到系统剪贴板
【发布时间】:2017-03-24 22:11:11
【问题描述】:

我正在使用 Ubuntu 12.04 Beta 和随附的 Vim。我正在尝试使用 Vim 将文本文件的内容复制到 Chrome 浏览器。 我尝试过+*y 及其所有变体。我试过:set clipboard=unnamed:set clipboard=unnamedplus。不工作。 我不想使用 xclip、GVim 或任何其他。我尝试使用 xclip(不是 Ubuntu 12.04 中的标准包),但这也不起作用,也太费力了。

如何将文本复制到剪贴板,然后粘贴到任何位置,例如 Chrome?

【问题讨论】:

  • vim --version 的输出是什么?
  • "+y 在 Ubuntu(以及我尝试过的所有其他平台)中为我工作。
  • 是的,那个 Beta 标签让我很好奇。
  • xclip 有什么问题? cat file-to-copy.txt | xclip 效果很好,很容易记住。
  • VIM - Vi IMproved 7.3(2010 年 8 月 15 日,2012 年 3 月 1 日 22:09:36 编译) 包含的补丁:1-429 由 pkg-vim-maintainers@lists.alioth.debian.org 修改 编译由 buildd@ 无 GUI 的巨大版本。包含 (+) 或不包含 (-) 的功能: +arabic +autocmd -balloon_eval -browse ++builtin_terms +byte_offset +cindent -clientserver -clipboard +cmdline_compl +cmdline_hist +cmdline_info +cmets +conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con +diff +有向图

标签: vim ubuntu


【解决方案1】:

您的 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 的其他好处而失去剪贴板功能。
  • 你最终会得到两个 vim:/usr/bin/vim/usr/local/bin/vim。您始终可以使用显式路径运行旧版本。不过,我不确定您认为可能会损坏什么:您可以编译任何您需要的功能,但这个配置脚本包含了大部分内容。有关更多选项,请参阅./configure --help
  • 我应该澄清一下我的评论:您最终还会得到两个 gvim:/usr/bin/gvim(来自 vim-gtk)和 /usr/local/bin/gvim(指向 /usr/local/bin/vim 的符号链接,将在 GUI 模式下打开默认情况下,而不是在控制台模式下打开的名称“vim”)。无论您是否处于 GUI 模式,它都将支持剪贴板(如果您 ssh -X 在 ssh 客户端机器上使用 X 服务器,甚至可以通过 ssh 支持剪贴板)。
  • 嗯。这使事情变得困难。同时,我意识到反过来也可以。当我从 Chrome 中删除一些内容时,我会执行 CR-SHIFT-V 并且内容会进入 Vim -console 模式。它错过了顶部的一些字符。但这仍然有效。反过来不行。
【解决方案2】:

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

【讨论】:

  • 这个。你应该使用 vim-gtk,或许可以考虑将set clipboard=unnamedplus 或设置clipboard=unnamed 放入你的vimrc,以便默认寄存器也用于剪贴板操作。
  • 我有 -x11 -xim -xsmp -xterm_clipboard -xterm_save。这是否意味着我永远不会获得剪贴板功能?我将如何编译 vim 以拥有所有好的功能?是否与测试版有关并且会在最终版本发布时发生变化?我也想在ssh中使用vim,所以不用vim-gtk
  • 你试过我的建议了吗?如果你这样做了,你会发现你仍然可以通过 ssh 在控制台中使用它。
  • @sashan 正如我所说,我有-X11,所以我没有剪贴板。我想使用纯 vim。我一定会选择 DrAl 解决方案。让我们看看。
  • @Gatoo:好的,所以基本上你想从源代码构建一个 vim 版本,该版本将具有与 Ubuntu 通过 'apt-get 为你提供的功能相同或接近相同的功能安装 vim-gtk'?
【解决方案3】:

安装包vim-gnome 而不是vim。它带有 clipboard 启用。

【讨论】:

  • 我在使用 Vim 时没有考虑过基于 Windows 的模型。第一个要求是在非 GUI 框上工作。是否支持非GUI操作?
  • vim-gnome 适用于 Linux。而且我不确定它是否适用于非 GUI 框。我还没有在服务器上尝试过。
  • @dan-klasson,我刚刚在 12.04 尝试过。它确实有效。
【解决方案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

粘贴>

【讨论】:

    【解决方案5】:

    如果您按照@DrAl 的说明运行了configure,但仍然无法编译GUI,并且您在./configure 的输出中看到了这一点

    checking for X... (cached) no
    

    那么你可能不得不删除configure创建的缓存文件。

    find . -name config.cache -delete
    

    然后重新运行configuremake 并再次检查src/vim --version - 它应该显示现在包含gui。

    【讨论】:

    • 真的卡在那里了。谢谢!
    【解决方案6】:

    你可以做到;只需管道到 xclip。

    gg
    V
    G
    :'<,'>w !xclip
    

    从这里:in vim with xclip, yank to clipboard

    【讨论】:

      【解决方案7】:

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

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

      不是很优雅,但很有效。

      【讨论】:

        【解决方案8】:

        我真的很喜欢这组快捷键:

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

        这只是一种更简单的方法,然后每次都输入“*”和“+”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-08
          • 1970-01-01
          • 1970-01-01
          • 2012-06-24
          • 1970-01-01
          • 2010-11-07
          • 2016-08-02
          • 2012-07-14
          相关资源
          最近更新 更多