代码之家  ›  专栏  ›  技术社区  ›  nfm

VIM复制粘贴到系统缓冲区的行为不符合预期

  •  1
  • nfm  · 技术社区  · 16 年前

    我很头疼,想弄明白为什么Vim不复制到系统缓冲区。

    这是我的工作流程:

    vim asd
    y1y
    :q
    vim qwe
    p
    

    在ComputerA和ComputerB上,这按我想要的方式工作:从文件asd中抽出的行放入文件qwe中。

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

    所有系统都在运行Ubuntu 8.04。ComputerA安装了VIM完整软件包,ComputerB和ComputerC安装了VIM软件包。ComputerA已安装XORG,正在使用FluxBox窗口管理器,并且可以在本地访问。computerB和computerC没有x,我正在对它们进行ssh操作。

    我读了很多书,认为这是因为计算机C是用剪贴板编译的,但是我在所有三台计算机上运行了VIM——版本,只有计算机A是用+剪贴板编译的。

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

    6 回复  |  直到 15 年前
        1
  •  5
  •   DrAl    16 年前

    默认情况下,VIM不会复制到系统缓冲区。它记住内容的唯一方法是,如果VIM的多个实例使用相同的.viminfo文件。可能由于文件权限或中的其他设置,.viminfo文件没有被写入。 'viminfo' (期权)。

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

    :help 'viminfo'
    

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

    :set viminfo?
    

    作为旁白,如果您想使用系统剪贴板(它必须存在,所以您需要这样做) ssh -X )可以使用:

    :set clipboard+=unnamed
    

    然后,所有复制和粘贴操作都将使用x11选择缓冲区。当然,您需要用vim编译 +clipboard 因为这是有效的,所以它不能解决你眼前的问题。见:

    :help 'clipboard'
    

    更多信息。

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

    :set viminfo?
    :set clipboard?
    

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

    vim asd
    "ayy
    :q
    vim qwe
    "ap
    

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

        2
  •  2
  •   Leonid Shevtsov    16 年前

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

    vim asd
    "+y
    :q
    vim qwe
    "+p
    
        3
  •  1
  •   Timothy Pratley    16 年前

    看看Viminfo 如果你最后一个拉的是hi,它应该包含:

    寄存器:

    “0行0” 你好

    可能文件权限有问题?

        4
  •  0
  •   Mark Rushakoff    16 年前

    不完全是这样 解决 你的问题,但最好的解决办法是

    vim asd
    y1y
    :sp qwe
    p
    :q
    

    将打开 asd 然后(显然)猛拉一下 劈开 qwe ,请 put 你刚才的项目,并关闭分割打开的文件。使用这种方法,就不需要关闭您正在处理的文档,而是启动一个新的vim实例。

    如果你不喜欢水平分割, :vsp 垂直拆分,有时更容易阅读/使用。

        5
  •  0
  •   Pif    15 年前

    好吧,我不知道系统缓冲区的问题,但是简单地打开新文件 :e filename ,然后粘贴,然后保存和 :e # 如果需要,返回原始文件?是的,我知道,标签和分割很酷,但简单也可以做到。

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

        6
  •  -1
  •   Mosh    16 年前

    试试这个:

    set clipboard=unnamed
    

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

    推荐文章