如何在Vim的终端模式下复制和粘贴?

32

我经常想从:terminal窗口复制文本到普通的文本缓冲区。目前我通过退出shell会话并从历史记录中复制。

一定有更好的方法。

3个回答

57

复制

从终端窗口复制,请按 CTRL-W N (这是大写字母N)1 或者 CTRL-\ CTRL-N(这不是大写字母N) 进入正常模式。在此之后,您可以使用所有通常的vim命令来复制和粘贴内容。

进入插入模式将使您返回到您的shell。


粘贴

要将寄存器中的内容粘贴到终端窗口中,您必须处于终端作业(“插入”)模式。

按下 CTRL-W ",然后输入寄存器。


:help 终端模式 告诉我们:

当作业运行时,终端的内容受到作业的控制。包括光标位置。键入的键将发送到作业中。终端的内容可以随时更改。这称为终端作业模式(Terminal-Job mode)。

使用CTRL-W N(或'termkey' N)切换到终端正常模式。现在终端窗口的内容在Vim的控制下,作业输出被暂停。CTRL- \ CTRL-N也是相同的。

[...]

在终端正常模式下,您可以使用通常的Vim命令移动光标,可视化标记文本、复制、剪切等。但您不能更改缓冲区的内容。会进入插入模式的命令,例如“i”和“a”,将返回到终端作业模式。

请参阅:h 终端键入以在终端窗口中使用更多有用的命令。


1很遗憾vim帮助文档没有告诉你要用大写的N,我保留了原来的表示法。


1
让光明存在! - Enlico
"CNTRL-W" 对我没有效果,可能是因为剪贴板没有启用,但 https://dev59.com/5anka4cB1Zd3GeqPU9o4 可以用。 - Niels Tolstrup
@NielsTolstrup 这与剪贴板无关。它是关于将vim的寄存器放置的问题。 - rkta

13

可以使用Shift+Insert作为一个快捷键,将剪贴板中的内容粘贴到正在运行的终端会话中。设置映射方式如下:

:tmap <S-Insert> <C-W>"+

这将导致从+寄存器中粘贴。 或者使用*寄存器,在MS Windows中有时效果更好。


5
在你的 .vimrc 文件中设置剪贴板选项,以使用系统剪贴板作为 Vim 的剪贴板。由于操作系统不同可能会有所不同,假设您在使用 Mac OS: set clipboard=unnamedplus 然后您可以使用 y 命令复制,用 Cmd + V 在其他应用程序中粘贴。记得通过单击任何地方或按 Ctrl+\ Ctrl+n 键退出终端的插入模式。

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