我正在努力弄清楚为什么vim没有复制到系统缓冲区。
这是我的工作流程:
vim asd
y1y
:q
vim qwe
p
在computerA和computerB上,这就像我想要的那样:从文件asd中拉出的行放入文件qwe。
在computerC上,这不起作用。
所有系统都运行Ubuntu 8.04。 computerA安装了vim-full软件包,computerB和computerC安装了vim软件包。 computerA安装了xorg,正在使用fluxbox窗口管理器,并在本地访问。 computerB和computerC没有X,我正在抨击它们。
我已经做了很多阅读,并认为这是因为computerC是用-clipboard编译的,但是我在所有三台计算机上都运行了vim --version,而且只有computerA是用+ clipboard编译的。
我错过了一些明显的东西吗?我相信用户的.vimrc和全局vimrc文件是相同的。如果有帮助的话,我可以发布vim --version的输出和vimrc文件的内容。
答案 0 :(得分:5)
默认情况下,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
而不是未命名的寄存器。
答案 1 :(得分:2)
为什么不使用"+y
和"+p
,它们直接使用系统的剪贴板缓冲区
vim asd
"+y
:q
vim qwe
"+p
答案 2 :(得分:1)
看看.viminfo 如果你猛拉的最后一件事是嗨它应该包含:
“”0行0 喜
也许文件权限搞砸了?
答案 3 :(得分:0)
它并不完全解决您的问题,但是一个非常好的解决方法是
vim asd
y1y
:sp qwe
p
:q
哪个会打开asd
并从中显而易见(显然),然后拆开 qwe
,put
您的刚刚开始的项目,然后关闭拆开文件。使用这种方法,无需关闭正在处理的文档,即启动Vim的新实例。
如果您不喜欢水平分割,:vsp
会进行垂直分割,有时可以更容易阅读/使用。
答案 4 :(得分:0)
好的,我不知道系统缓冲区问题,但是只需用:e filename
打开新文件,然后粘贴,然后保存并:e #
回到原始文件如果需要的话?是的,我知道,制表符和分割很酷,但简单也可以完成这项工作。
您也可以使用目标文件中的ex来读取要通过提供行范围的:r
命令包含的内容,或者从源文件中附加所选文本(通过简单的行号) / range或全能g
命令)与:w >> filename
。
答案 5 :(得分:-1)
试试这个:
set clipboard=unnamed
它允许通过系统剪贴板复制和粘贴。