在xterm中运行Vim 7.2,将文本复制到Windows剪贴板

5
我正在使用编译了+xterm_clipboard的Vim 7.2版本,通过putty在xterm中使用。我已经在.vimrc中设置了set clipboard=unnamed,根据我在其他帖子中所读到的,这应该将所有yank/delete操作放入系统剪贴板。然而,当我尝试将我所复制的内容粘贴到像记事本这样的MS应用程序时,却无法实现。
当我使用鼠标在vim中选择文本时,它会自动复制到系统(MS剪贴板)。我希望在使用类似3yy这样的键盘命令时也能拥有相同的功能。
有人可以告诉我我做错了什么吗?

“在通过PuTTY的xterm中”是含糊不清的。你要么使用PuTTY通过SSH连接到Linux服务器,没有涉及到xterm。或者你在Windows上运行X服务器,并使用PuTTY的X11 SSH转发进行转发。然后你在其上运行xterm。在这种情况下,无论是哪个软件进行X11转发都无关紧要,因为它是由PuTTY执行的。 - Peter Cordes
此外,这个问题应该放在superuser.com上。 - Peter Cordes
3个回答

2

尝试

"+3yy
"*3yy

"+p
"*p

你能告诉我如何在记事本中执行"+p"吗? :)如果我打开另一个vim会话并将其粘贴到那里,你告诉我的方法可以工作 - 我知道。我想要的是一种将其复制到Windows剪贴板中的方法,然后我可以将其粘贴到记事本中!如果你认为我有点不清楚,我更加明确:我在我的PC上运行Win XP,并使用putty在远程机器上获取xterm,在那里文件在vim中打开! - TCSGrad
在记事本中,您可以进行粘贴操作。我不确定它在Windows上的确切工作方式,但在Unix上,它会将内容复制到“系统”选择中。我猜Windows上的其中一个也会这样做。这还取决于Windows上Xserver实现的方式以及它如何处理选择。我只能给出与vim相关的部分答案。 - Michael Krelin - hacker
1
这就是我想要传达的:将文本拖到系统缓冲区并不会将其放入Windows剪贴板,因此我无法在任何地方粘贴它。我猜答案(如果存在)可能涉及设置一些Putty / X配置,以确保Vim有一种将文本放入Windows剪贴板的方法。 - TCSGrad
我不太确定我理解你的设置。您提到了putty和xterm。这是否意味着您运行本地X服务器,使用putty连接到机器,然后使用putty的隧道在本地X服务器上打开xterm?如果是这样,那么您应该查看您的X服务器设置。我大约10年没有见过Windows X服务器了...;-) - Michael Krelin - hacker
好的 - 这是我的设置: 1)本机操作系统是win XP 2)我在一个Linux盒子上有一个帐户,我使用Putty连接到它 3)$TERM环境变量的值为TERM=xterm 4)我主要在Linux帐户中使用的shell是tcsh 5)我使用vim 7.2我感谢您回答我的问题的努力 - 这就是为什么我试图在我的描述中尽可能精确! - TCSGrad
1
啊,原来你不用xterm,而是用putty,并希望它的行为像xterm。这可能是可能的,但超出了我的专业知识范围。我会寻找putty选项。不确定是否有任何感兴趣的选项... - Michael Krelin - hacker

1
如果您正在本地运行vim,则可以选择以下任一操作:
"+p
"*p

正如黑客所提到的那样,这将起作用。由于您已经 ssh 到另一个框中,因此这些文本只会复制到您 ssh 到的框的剪贴板中。

您需要的是 putty 复制文本的方法,即使用鼠标 选择要复制的文本

虽然在 sshed 到 vim 中,我通常使用ALT + 鼠标选择(用于块选择),因为我通常有行号。

希望这可以帮助您!


是的,我知道使用鼠标可以工作 - 这在问题中提到了。但使用vim的重点是你不必依赖鼠标 - 通常总有一种替代方法。然而,在这种情况下,我认为我对vim要求有点过高,所以我猜我得寻找在ssh上共享剪贴板的方法!! - TCSGrad
哦,对了,我漏掉了那一部分,抱歉!如果你的vim编译时启用了X11和xterm_clipboard功能,并且在PuTTY中开启了X11转发,则可能会起作用。 - Nick Knowlson
据我所记,我已经在putty中启用了X11转发...但它仍然无法工作-我会检查并验证。 - TCSGrad
X11转发意味着您可以在Linux框中运行图形应用程序,并使GUI出现在您连接的Windows框中。您可能想尝试运行xvim/gvim。 - Adam Luchjenbroers

0

我正在尝试弄清楚如何在PuTTY中(不涉及xterm)使vim与Windows剪贴板交互。

到目前为止,我的研究表明这是不可能的。xterm具有剪贴板交互终端转义序列,但它们在默认情况下被禁用。在PuTTY中它们可能根本没有实现。这可能是出于安全原因:您不希望远程系统完全访问您的剪贴板。

我不确定vim的xterm_clipboard功能是否应该使用它。到目前为止,我的搜索只能找到人们抱怨它未启用的内容,或者谈论如何获得启用了它的vim,而不是它的实际实现方式。我找到的最好的资料是这篇指南,其中提到了它,但没有说任何关于转义序列与X选择还是X剪贴板之间区别的信息。(是的,X11有一个选择和一个单独的剪贴板。某些复制方式只设置其中一个。)


Vim的剪贴板支持直接与X服务器通信。在Linux桌面上,使用终端中的vim(例如我的Konsole),:“*dd将行放入剪贴板。

使用

(unset DISPLAY; strace -s256 -o /dev/pts/18 vim some_file.txt)

vim没有X服务器可供使用。(pts18是另一个终端窗口的tty。)我以为vim可能会使用xterm转义序列来设置剪贴板,但它没有。没有write(1, ...)系统调用整个区域,所以显然不是尝试使用转义序列通过xterm将区域放入剪贴板。

我在Ubuntu 15.04上的Konsole中运行了这个命令,并使用TERM=xterm进行了尝试。我还尝试在真正的xterm中运行。

哦,xterm默认禁用GetSelection/SetSelection。也许启用此功能后,vim会尝试使用它?虽然我不知道这是否有帮助,因为PuTTY也必须支持它,这是不太可能的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接