如何在 Vim 中复制文本(到剪贴板)

hrs, 11 八月, 2023

想要从 Vim(在命令行上)获取文本并输入到另一个应用程序中?在这里了解如何将文本从 Vim 复制到Mac、Linux 和 Windows 上的系统剪贴板。

首先,注意一致的用户界面
“请注意一致的用户界面和错误报告,”Patrick J. LoPresti 在 1992 年 7 月的一个炎热的日子里写道,关于Unix行编辑器ed和典型的第一次使用它:

golem$ ed
?
help
?
?
?
quit
?
exit
?
bye
?
hello?
?
eat flaming death
?
^C
?
^C
?
^D
?

当然,今天人们对Vim也开了同样的 玩笑(vi 是 ed 的后裔)。

假设您知道如何退出 Vim,让我们尝试从中获取文本而不是我们自己。(下面使用命令行工具复制行的命令在标准文本编辑器 ed 中的工作方式相同。)

如何在 Vim 中复制文本(到剪贴板)
使用剪贴板寄存器
所需时间:  1分钟

在Mac、Windows和Linux上将文本从 Vim 复制到系统范围的剪贴板:

按V进入可视模式。
“V”不进入视觉模式:Esc先按下以确保您处于正常模式。
不需要可视化:当然,你不需要使用可视化模式来复制到 Vim 中的剪贴板;所有其他指定要复制/复制内容的方法也都有效(例如,y3w复制三个单词)。

使用移动键仅突出显示您要复制的文本。
Vim 快捷键:按J向下、K向上、H向左、L向右、W向前跳一个单词、按单词向后B跳、最后一行、第一行等。Shift GGG

现在输入"*y.
原因如下:Vim 有多个内部剪贴板(称为寄存器),其中一些很特殊。要访问任何剪贴板,请在寄存器前加上"(引号),并且系统剪贴板具有特殊名称*(星号)。要将文本复制到寄存器,您最终需要使用y(“yank”)。


使用 Vim 剪贴板寄存器将文本复制到系统剪贴板
使用命令行工具
如果使用 Vim 的系统剪贴板寄存器进行复制失败,您可以重新启动以将文本发送到命令行工具:

按Shift V进入视线模式。
“Shift V”不进入视觉模式:Esc先按下以确保您处于正常模式。
不必是可视化的:当然,您不需要使用可视化模式在 Vim 中进行复制(见下文);不过,为了在 Vim 和Neovim中以一种平易近人的方式(如果可能不是最快)复制文本,视觉模式应该可以达到目的。
总是行:请注意,Vim 只允许您复制整行;虽然您可以使用视觉模式突出显示一行的一部分,但 Vim 仍会将整行文本发送到剪贴板。有关复制行的一部分的信息,请参阅下文。
使用动作键仅突出显示要复制的行。
类型:.
现在,输入适用于您的操作系统的命令,将文本从 Vim 复制到剪贴板,如下所示:'<,'>。
macOS:附加:w !pbcopy到命令行(使用 pbcopy 从终端复制到剪贴板)。
Windows:键入:w !clip。
Linux:写:w !xclip -selection clipboard。
示例:在 Mac终端中,Vim 命令行将读取'<,'> :w !pbcopy。
按Enter。


将文本从 Vim 复制到 Mac 剪贴板
如何在 Vim 中复制文本(并复制到剪贴板):常见问题解答
我可以在没有视觉模式的情况下从 Vim 进行复制吗?
是的。

您可以使用任何允许您拉动 * 寄存器以复制到剪贴板的选择命令。

示例:用于:%y *将整个文档复制到剪贴板。

或者,将行从 Vim 复制到系统剪贴板,而不先使用命令行工具突出显示它们:

按:(冒号)进入命令行。
键入first_line,last_linew !后跟操作系统的复制命令(见上文)。
Lines:将first_line 替换为要复制的第一行的编号,将last_line 替换为最后一行。
最后一行:您可以用于$最后一行。
所有行:%代表整个文档;它相当于0,$(从第一行到最后一行)。
示例:将命令读取:3,7w !clip为复制 Windows 命令行上的第 3 行至第 7 行。
整个文档:用于:w !xclip -selection clipboard复制整个文件,例如在 Linux 上。
如果剪贴板寄存器不起作用,如何复制部分行?
如果剪贴板寄存器无法复制到系统剪贴板,要复制行的一部分,通常最简单(因此也是最好)依赖终端的复制命令:

使用鼠标突出显示要复制的文本。
行内:最好仅突出显示行的一部分,否则无关字符(例如行号)也会被复制,并使使用文本变得更加困难。
按Ctrl C或Command C进行复制,或右键单击并从上下文菜单中选择复制。
如何在图形 Vim 中复制?
在使用操作系统图形界面(而不是命令行)的 Vim 中,您可以突出显示文本并使用标准复制命令(通常为 或Ctrl C)直接复制Command C,或者使用上面的系统剪贴板寄存器。

标签

评论