如何使用vim命令行复制vim编辑器中的所有文本?

36

我想从 vim 编辑器中选择所有文本,我尝试了命令 :%y+ 但是出现错误 E850: Invalid register name。我是从 这个链接 中得到该命令的。请帮助我如何复制打开在 vim 中的文件的所有文本。他们正在使用 yank 命令,它的意义是什么。


2
你想选择文本还是搜索它? - Andy Ray
你需要拥有一个图形化的 Vim,例如 MacVim 或 gVim,或者编译时启用了 +xterm_clipboard 选项的终端 Vim(参见 vim --version),才能使用 + 寄存器。你具体想做什么? - Amadan
尝试使用Nano而不是Vim。 - romainl
你真正想要做什么? 当你说你想要“选择”文本,但是使用“yank”(即“复制”)命令时,你在做什么? 然后你又问如何“搜索”文本。这些是三个不同的任务! - Ben
1
好的,这解决了一个问题。但是,你为什么需要从命令行进行可视化选择呢?你想用那个选择做什么? - Ben
显示剩余2条评论
6个回答

28

我有类似的问题。不知道为什么你得到了那么多的负面评价。 问题在于你没有安装vim-gnome,它需要大约24 MB的空间,并添加了一个内置vim的功能。

sudo apt-get install vim-gnome

然后您的命令就会起作用。:%y+这个命令会将所有文本复制到系统剪贴板中。


这是正确的答案,谢谢!很多人说要使用 *+,却没有意识到如果没有这个,这些寄存器只会发出嘟嘟声或显示“无效的寄存器名称”。 - melissa_boiko
很好的答案。要复制所有行,可以使用 %y+链接 - Scott123180
针对Ubuntu 19+用户的快速提示:vim-gnome已不再存在,但是vim-gtk3基本上可以实现相同的功能。 - Tooster

17
TLDR: 如果您想将Vim中的文本复制到系统剪贴板,请键入ggVG"*y。以下是说明...
Vim在终端中运行,根据您使用它的方式和运行的Vim类型,它并不是真正设计用于您用鼠标选择文本并以传统方式复制和粘贴。
如果您想要使用Vim选择所有文本,请使用ggVGy(注意中间大写的VG)。这个命令将光标移动到文件顶部,进入可视模式,移动到文件底部(从而选择所有文本),然后复制它。然后您可以使用p将其放置(粘贴)但仅限于Vim内部如果您想要复制到剪贴板并在Vim之外使用,请尝试以下方法:
首先,使用上述命令选择所有内容但最后不要使用y:(ggVG)。然后按"*y。现在应该将其复制到操作系统的剪贴板中,您可以在Vim之外的任何地方粘贴(Ctrl/Cmd+v)。这可能因您对Vim的设置而有所不同,但应该可以正常工作。

命令的简单解释。 gg 定位到文件顶部。 V 进入按行选择模式。 G 定位到文件结尾。 y 复制文本但不复制到剪贴板。 p 粘贴文本。

更高级(即炫酷)的东西:

" 允许您访问寄存器。例如,"a 提供对寄存器 a 的访问。

* 是系统剪贴板,因此 "* 可以访问系统键盘。因此,"*y 将复制到系统剪贴板。


从http://vim.wikia.com/wiki/Accessing_the_system_clipboard获得了一个很好的答案ggVG“* y”。 - jazzyfresh

3
尽管有一个很好的解释如何在vim中利用系统剪贴板,但似乎你只是无法让vim首先访问剪贴板。尝试安装vim-gnome,它会为您提供需要访问系统剪贴板的软件包。

由于某种原因,"*对我不起作用,但完全相同的命令使用“+”寄存器却有效。


1
你可以使用以下命令来选择并复制任意数量的文本:Vggy/vggy或VGy/VGy。在你的情况下,你想要复制文件中的所有文本,所以使用gg/G命令即可。
gg命令是将光标移动到文件底部时进行复制,而gg命令则是将光标移动到文件顶部时进行复制。
另外,你也可以使用Vk(按照需要输入的次数)y命令来复制所选行的文本。

1

要选择整个文件,您可以跳转到开头,启动可视化模式,然后跳转到结尾:

ggVG


1
这个问题已经有几年了,但我在Linux Mint 18上遇到了同样的问题。我发现使用xclip对我有用。您可以将命令vmap <F7> :!xclip -sel c<CR><CR>映射到您的.vimrc中,以将当前选择的内容在可视化模式下复制到系统剪贴板中。 这里是一个包含上述(和其他)解决方案的主题。

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