如何在不同的vim实例之间复制数据?


41

如果我使用第一个vim复制行(带有yy),如何粘贴到另一个终端的vim(带有p)?有什么命令或设置可以做到吗?我可以复制并粘贴到全局系统剪贴板吗?

我知道以下方法是可行的,但我想要一个更简单的方法:

  1. 我不想退出第一个vim,然后重新打开第二个vim。

  2. 我不想使用单独的窗口(带有:sp)。

Answers:


49

首先,您必须安装启用剪贴板的vim版本。为了适应具有非图形环境的用户(例如,Ubuntu Server用户),vim并且vim-tiny请勿使用此功能。您将需要安装GVim 安装GVim,它可以以图形方式或在终端中启动。GVim将替换vim命令。

您可以将文本从第一个vim提取到“剪切缓冲区”中,然后将文本粘贴到第二个vim中。要复制到全局剪切缓冲区,请使用+寄存器。该"键允许您指定在执行抽动或粘贴操作时要使用的寄存器。

在第一个vim中,将一行插入+寄存器:

"+yy

然后,从+第二个vim中的寄存器中粘贴:

"+p

有关可用寄存器的更多信息,请参阅:help registers。您还可以"+p用于粘贴从系统上任何其他来源复制的文本。


无论您花多少钱,如果安装GVim(该软件包可能称为vim-gnome之类的东西),菜单项通常会为您提供它们将调用的快捷键。
zpletan 2011年

1
我不想安装Gvim。我该如何在vim中执行此操作?
trusktr 2013年

1
@trusktr实际上也可以在vim中工作。在此问答中,您至少需要vim 7.3.74(这意味着Ubuntu 11.10或更高版本)。
lumbic

如果您在tmux内部启动了一个vim,而在外部正常启动了另一个vim,那么以某种方式无法正常工作-您是否有机会解决该问题?
serup

"*yy"*p也可以。如果您点击:reg,您将看到那个星星注册表
elquimista


9

我喜欢Bill的解决方案,并创建了一个映射:

vmap <leader>y :w! /tmp/vitmp<CR>                                                                   
nmap <leader>p :r! cat /tmp/vitmp<CR>

可视模式下的第一个将所有内容复制到/ tmp / vitmp中,第二个复制/ tmp / vitmp中的内容到文件中


简单直接的解决方案-旧的时尚方式-谢谢我的帮助
serup

将其添加到.vimrc后,我需要在Vim中输入什么?
Vitaly Zdanevich '17

您必须设置vim,以便可以使用前导键,然后按y进行复制,使用前导键,然后按p进行粘贴。
萨米尔·萨德克

1
这是一部作品。使用"*y似乎在服务器上已被破坏
ospider

天啊。我一直在通过在Docker中的tmux中使用vim搜索有关此问题的时间。我的普通vimrc已经具有unnamed / unnamedplus,在docker的tmux中的vim中不起作用。我在互联网上也没找到任何东西。但是,这似乎可以在所有机器上使用!在docker,Mac和本地Arch上。谢谢!!
汤米,

5

我在各种Unix系列机器之间四处移动,发现以下顺序始终对我有用:

在源vi会话中:

  1. 使用ESC m a标记第一线
  2. 使用ESC m b标记最后一行
  3. 用于:'a,'b w! xfer将范围写到暂存文件

在目标会话中:

  1. 将光标移到插入行
  2. 使用ESC :r xfer文本阅读

我知道它并不漂亮,但它总是对我有用!


2

它实际上很简单:安装一个vim支持剪贴板的版本。如果您vim不这样做,请获取以下任何一项:

sudo apt-get install vim-athena
sudo apt-get install vim-gnome
sudo apt-get install vim-gtk

安装完成后,只需运行即可vim。您还可以通过运行以下命令来验证剪贴板是否已启用:

 vim --version|grep clipboard

你应该看到+xterm_clipboard


这个答案成为问题的核心,即您的Vim版本是否启用了剪贴板功能?如果没有,其他答案将无济于事。执行“ vim --version”并查找“ + clipboard”。我认为+ xterm_clipboard仅在需要X11剪贴板支持的情况下适用,但是如果您使用的是Ubuntu,则也需要这样做。

2

您可能都会讨厌这个答案。我曾经在80年代在各种Unix计算机上进行vi的工作,最近在Linux上玩过。

我剪切和粘贴的解决方案是使用Windows上运行的Putty访问我的Linux机器。

Putty使您只需突出显示它即可在窗口中复制任何txt。然后,您可以转到另一个Putty窗口/会话,然后单击鼠标右键以粘贴。

再简单不过了。现在有vim。太糟糕了,这在我的时代还没有到来,这本来可以帮助我抵御emacs黑手党。


1

它并不是完全使用yy,但是如果您选择要用鼠标复制的文本(有时可能需要使用Shift- [drag]),请切换到另一个终端窗口,然后执行[middle click]或Shift- [middle单击],文本将插入到您当前的插入点。

这适用于大多数命令行和GUI程序,不仅适用于vim。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.