1

我很头疼,试图弄清楚为什么 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 窗口管理器,并且可以在本地访问。计算机B 和计算机C 没有X,我正在进入它们。

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

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

4

6 回答 6

6

默认情况下,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而不是未命名的寄存器。

于 2009-09-03T10:04:50.817 回答
2

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

vim asd
"+y
:q
vim qwe
"+p
于 2009-09-03T11:19:05.567 回答
1

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

寄存器:

""0 行 0 你好

也许文件权限搞砸了?

于 2009-09-03T07:51:56.767 回答
0

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

vim asd
y1y
:sp qwe
p
:q

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

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

于 2009-09-03T11:13:54.270 回答
0

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

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

于 2010-09-22T22:57:41.450 回答
-1

试试这个:

set clipboard=unnamed

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

于 2009-09-03T10:02:02.540 回答