【问题标题】:Vim copy-paste to system buffer not behaving as expectedVim 复制粘贴到系统缓冲区的行为不符合预期
【发布时间】:2009-09-03 07:29:14
【问题描述】:

我很难弄清楚为什么 vim 没有复制到系统缓冲区。

这是我的工作流程:

vim asd
y1y
:q
vim qwe
p

在计算机 A 和计算机 B 上,这可以按我的意愿工作:从文件 asd 中提取的行被放入文件 qwe。

在计算机 C 上,这不起作用。

所有系统都运行 Ubuntu 8.04。 computerA 安装了 vim-full 包,computerB 和 computerC 安装了 vim 包。 computerA 安装了 xorg,正在使用fluxbox 窗口管理器,并且可以在本地访问。 computerB 和 computerC 没有 X,我正在对它们进行 ssh 处理。

我做了很多阅读,并认为这是因为 computerC 是用 -clipboard 编译的,但是我在所有三台计算机上运行 vim --version 并且只有 computerA 是用 +clipboard 编译的。

我是否遗漏了一些明显的东西?我相信用户的 .vimrc 和全局 vimrc 文件是一样的。如果有帮助,我可以发布 vim --version 的输出和 vimrc 文件的内容。

【问题讨论】:

    标签: vim buffer x11 copy-paste


    【解决方案1】:

    Vim 默认不复制到系统缓冲区。记住内容的唯一方法是多个 vim 实例使用相同的 .viminfo 文件。可能由于文件权限或 'viminfo'(选项)中的不同设置而未写入 .viminfo 文件。

    有关 viminfo 配置的更多信息,请参阅

    :help 'viminfo'
    

    要查看每台计算机上的当前配置,请执行以下操作:

    :set viminfo?
    

    顺便说一句,如果你想使用系统剪贴板(它必须存在,所以你需要做ssh -X),你可以使用:

    :set clipboard+=unnamed
    

    然后所有的复制和粘贴操作都将使用 X11 选择缓冲区。当然,你需要用+clipboard 编译的vim 才能工作,所以它不会解决你的直接问题。见:

    :help 'clipboard'
    

    了解更多信息。

    也许您可以在每台计算机上发布以下结果?

    :set viminfo?
    :set clipboard?
    

    这将有助于我们更详细地诊断问题。你也可以试试:

    vim asd
    "ayy
    :q
    vim qwe
    "ap
    

    这将使用寄存器a 而不是未命名的寄存器。

    【讨论】:

    • 谢谢艾尔,你说得对。 ~/.viminfo 归 root:root 所有 - 我第一次使用 vim 时一定是 sudoed 或其他什么?用系统剪贴板叫错了树,感谢您的回答和新知识!
    • 你提到了剪贴板,这是在文本被高亮时使用的,或者当你单击鼠标中键时使用的。你知道系统剪贴板叫什么吗?我基本上想做set sysClipboard+=unnamed
    【解决方案2】:

    为什么不使用"+y"+p,它们直接与系统的剪贴板缓冲区一起工作

    vim asd
    "+y
    :q
    vim qwe
    "+p
    

    【讨论】:

    • -1:来自原始帖子:“只有 computerA 是用 +clipboard 编译的”。因此,这仅适用于计算机A(除非它碰巧通过 viminfo 机制保存在未命名的寄存器中,OP 已经声明该机制不起作用)。
    • 这也是相当多的征税stackoverflow.com/questions/8757395/…
    【解决方案3】:

    看看 .viminfo 如果你拉的最后一件事是 hi 它应该包含:

    注册:

    ""0 LINE 0 嗨

    可能是文件权限搞砸了?

    【讨论】:

    • 谢谢蒂莫西,文件权限确实被破坏了!
    【解决方案4】:

    它并不能完全解决您的问题,但是一个完美的解决方法是

    vim asd
    y1y
    :sp qwe
    p
    :q
    

    这将打开asd 并从中拉出(显然),然后split-open qweput 您刚刚拉出的项目,然后关闭拆分打开的文件。使用这种方法,无需关闭您正在处理的文档即可启动一个新的 Vim 实例。

    如果您不喜欢水平拆分,:vsp 会进行垂直拆分,这有时会更易于阅读/使用。

    【讨论】:

    • 另外,:tabn qwe 使用文件创建了一个新选项卡,IMO 更易于使用。 :gt & :gT 切换标签,顺便说一句。
    • :gT:gt 给了我 E492(不是编辑器命令),但 :tabn(无参数)和 :tabp 工作(使用 Vim 7.2)。我通常更喜欢拆分,因为我可以同时查看两个文档。
    【解决方案5】:

    好的,我不知道系统缓冲区问题,但是如果需要,只需使用:e filename 打开新文件,然后粘贴,然后保存并:e # 回到原始文件呢?是的,我知道,制表符和拆分很酷,但简单也可以完成这项工作。

    您也可以使用 ex,从目标文件中读取要包含的内容,通过提供行范围的 :r 命令,或从源文件中附加选定的文本(通过简单的行号/范围或全能的g 命令)和:w >> filename

    【讨论】:

      【解决方案6】:

      试试这个:

      set clipboard=unnamed
      

      它允许通过系统剪贴板进行复制和粘贴。

      【讨论】:

      • OP 已经声明只有computerA 是用+clipboard 编译的,所以这对computerB 或computerC 不起作用。
      猜你喜欢
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 2012-07-14
      • 2014-01-21
      • 2018-12-09
      • 2011-03-14
      • 1970-01-01
      相关资源
      最近更新 更多