当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

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

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

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

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

最佳解决方案

首先,您必须安装vim的clipboard-enabled版本。为了适应具有non-graphical环境的用户(例如Ubuntu Server用户),vimvim-tiny不会使用此功能。您需要安装GVim,它可以图形方式或在您的终端中启动。 GVim将取代vim命令。

vim,clipboard,ubuntu

您可以将文本从第一个vim中拉入’cut buffer’,然后将文本粘贴到第二个vim中。要复制到全局剪切缓冲区,请使用+寄存器。 "键允许您指定执行抽头或粘贴操作时要使用的寄存器。

在第一个vim中,向+寄存器中划线:

"+yy

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

"+p

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

次佳解决方案

对我有用的最佳解决方案(不要求我改变我的键绑定习惯)在这里:https://stackoverflow.com/questions/9166328/how-to-copy-selected-lines-to-clipboard-in-vim

刚刚放:

set clipboard=unnamedplus

在您的.vimrc中。

第三种解决方案

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

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

第一个在可视模式下复制全部在/tmp /vitmp中,第二个复制文件中/tmp /vitmp中的内容

第四种方案

我在各种Unix-family机器之间移动,发现以下序列始终适用于我:

在源vi会话中:

  1. 使用ESC m a标记第一行

  2. 使用ESC m b标记最后一行

  3. 使用:'a,'b w! xfer将范围写入临时文件

在目标会话中:

  1. 将光标移动到插入行

  2. 使用ESC :r xfer读入文本

我知道它不漂亮,但它总是适合我!

第五种方案

它实际上非常简单:安装支持剪贴板的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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/3080.html,未经允许,请勿转载。