如何从vim编辑器复制内容到shell命令行

7

我想从vim编辑器复制一些内容到shell命令行。我尝试过很多方法,但发现所有这些方法只在同一个vim编辑器中起作用。我的需求是在vim编辑器和shell命令行之间复制和粘贴。也就是说,vim -> shell。

PS:我正在使用putty。

编辑:

顺便问一下,如果只是从vim编辑器中复制一些内容并将其粘贴到unix/linux系统中的终端中会怎样?

注意:

在vim中运行:echo has("X11")的输出为0,因此我的系统不支持X11!


如果您无法使用鼠标中键粘贴 * 寄存器,您可以将文本部分保存到临时文件中,或者使用其他基于 shell 的工具(grep/sed/awk/...)来提取该部分。 - Kent
我通过“Ctrl+v”选择行,然后按“y”,但发现“y”无效。你是不是想说“y”?但是,当我按“y”并使用鼠标中键时,它也不起作用。我的意思是鼠标中键可以将剪贴板中的内容粘贴到vim编辑器中,而不是终端中。 - dj199008
似乎在我的vim环境中可以匹配工作。抱歉,不起作用。 - dj199008
1
你需要按下 双引号星号,然后再按下 y!而不是 星号 y - Kent
啊,我通过putty连接到了一个远程主机,它是一个Linux系统。然后在远程主机上打开了vim编辑器。我的本地主机操作系统是Windows。 - dj199008
显示剩余3条评论
4个回答

5

如果您的vim版本>= 7.3.74,则可以通过在.vimrc文件中添加一行来设置vim默认使用系统剪贴板:

set clipboard=unnamedplus

如需详细信息,请查看此链接。然后在vim中使用y(ank)命令,内容将存储在系统剪贴板中。

编辑:
此解决方案和"*y解决方案需要支持剪贴板的Vim。如果您缺乏该功能,请使用cat/grep/less/tail...提取要复制的文本。


我的问题是,我可以将剪贴板中的内容粘贴到任何文件中,但无法将其粘贴到终端(即Putty窗口)中! - dj199008
是的,但Shift+Insert键组合仅在将内容粘贴到Putty中的Vim编辑器时起作用。 - dj199008
看起来你想从vim编辑器复制到终端,并且这两个都在putty中打开的远程主机上?如果是这样,仅仅使用putty是不可能实现的。因为putty无法访问远程主机上的系统剪贴板,而Windows主机上的剪贴板也不知道你复制了什么内容。也许你需要使用X11转发或者直接使用鼠标选择内容。 - jfly
啊,如果只是从vim编辑器复制一些内容并将其粘贴到Unix / Linux终端中,会怎样呢? - dj199008
如果您在本地使用Unix/Linux系统,而不是远程连接,那么所有这些答案都应该适用。 - jfly

3

" + y 可以在 vim 中复制文本,然后使用 ctrl + shift + v 在终端中粘贴。


似乎按下 ctrl + shift + v 后,它会产生很多我可能不想要的东西。 - dj199008
@user2886717 能否具体说明一下?ctrl shift v 可以将“剪贴板”上的任何内容粘贴到终端上。在终端中,只需添加 shift 即可使用经典的 ctrl + c/v 命令。 - Jake Sellers
只是为了确保你明白,你是按下 + 吗?这个 + 只是用来表示你需要同时按下这三个按钮,你实际上并不需要按下 + 键将内容粘贴到终端。 - Jake Sellers
1
我的系统不支持X11,所以我认为这就是为什么所有这些解决方案对我都不起作用的原因。 - dj199008

2

使用管道

通过使用V命令选择行,然后通过命令:'<,'>w !sh执行所选内容。


1
也许这不是正确的答案,因为主题发起者想要在vimshell之间复制。但我通过搜索“vim将内容复制到shell执行”从谷歌来到这里,并发现这个解决方案完全回答了我的问题。 - Sergei Voronezhskii
我也喜欢这个建议。使用v来突出显示某些内容,然后:w !somecmd将数据传输到somecmd。非常简单易懂。 - WeakPointer

2
从评论中看,你的鼠标中键适用于 * 缓冲区,在vim中选择文本,然后按下3个按键:

"*y

然后切换到其他程序、终端、浏览器或任何其他地方,单击鼠标中键即可获取已复制的文本。

详见:h y,了解如何复制文本并保存在特定寄存器中(在此情况下,它是寄存器*)。


我的问题是,我可以将剪贴板中的内容粘贴到任何文件中,但无法将其粘贴到终端(即Putty窗口)中! - dj199008

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