如何在 Vi/Vim 中选择所有文本?

233 vi shell

使用 VI 工具编辑配置文件。

如何选择文件中的所有文本(大约 1000 行),复制它,然后粘贴到 Google 文档中?

小智 193

最简单和最快的方法是使用:: % y +然后转到 Google Docs(或任何地方)并粘贴。解释:

  • % 引用下一个命令在所有行上工作
  • y  猛拉那些线
  • +  复制到系统剪贴板

另一种方法是g g " + y G但您可能会承认上述方法更快更容易。

  • 我收到“E850:无效的注册名称”。第二种方法适用于复制,但无法进入 Ubuntu 16.04 上的系统剪贴板(至少对我来说——我有一个 .vimrc 可能会影响事情)。 (42认同)
  • 我一定做错了什么。我输入`:%y+`,然后我得到`E488: Trailing characters` (14认同)
  • @Tuxmentat 你能解释一下`:%y+` 中每个键的作用吗? (10认同)
  • 如果它解释了每个键对两个序列的作用,这个答案会更好。 (10认同)
  • 我最好的猜测:':' 意味着我们正在使用“ex 模式”命令(我认为)。无论如何,这是一个命令。'%' 是一个特殊的 [命令行范围说明符](http://vimdoc.sourceforge.net/htmldoc/cmdline.html#cmdline-ranges),它指定了整个文件。'y' 拉动一切,'+' 指定 [剪贴板寄存器](http://vimdoc.sourceforge.net/htmldoc/change.html#registers)。:help <command> 帮我解决了这个问题。 (7认同)
  • +1 对于第一种方法,另一个好处是它不会移动光标位置。 (4认同)
  • @EntangledLoops 如果未编译剪贴板支持,您将收到该错误。尝试下载 `gvim` 或更好的 NeoVim(用于所有性能改进) (3认同)
  • @johnywhy 运行 `:version` 并查看是否存在 `+clipboard`([来源](http://stackoverflow.com/a/7943665/264047)) (2认同)
  • @alexjolig @entangledloops 不确定该命令是否适用于旧版本,但对于 Vi 的最新版本(7.4 以上),这个答案是错误的,因为它需要 `:% + y` 而不是 `:% y +`(注意加号的位置)。希望可以为某人节省几分钟的痛苦。[归功于RL] (2认同)

Ard*_*rda 124

许多给出的答复也猛拉了我没有寻找的选择。

我正在ggVG为此目的使用(需要在正常模式下运行)。此命令选择文档内的整个文本。

我什至Ctrl+A为此重新映射,因为我真的不需要使用快捷方式(默认Ctrl+A映射)增加整数。

只需将其添加到您的.vimrc

map <C-a> <esc>ggVG<CR>
Run Code Online (Sandbox Code Playgroud)

<esc>首先要确保用户处于正常模式。

  • 正是我正在寻找的,很高兴看到 Ctrl+A 在默认情况下没有被 vim 占用。希望没有副作用。 (3认同)
  • 我个人使用 `ggVG`,但 `gg0vG$` 可能更合适,因为它更接近地复制了“正常”的 Ctrl+A 操作。 (3认同)

小智 46

cat file如果需要将其粘贴到浏览器中,您可以使用然后选择输出并复制和粘贴。

对于 vi,这是选择所有文本并将其写入新文件的方法:

shift v  -- visual mode
shift g -- jump to eof
"*y -- yank select text
:e my_new_file -- create a new file
"*p -- paste into a new file
Run Code Online (Sandbox Code Playgroud)

理论上这应该适用于 Linux 和 Windows - 我在 Mac 上尝试过,但它不起作用。


小智 20

使用 ggVG。键入“gg”以进入测试的顶部然后键入 VG。


Sac*_*ram 12

我在 CentOS-7 环境中使用 Vim 7.4。哪个让我选择所有文本是

:%y
Run Code Online (Sandbox Code Playgroud)

然后就p在我想要完整副本的下一个文件中。

或者

您可以使用 cat 命令。

cat copyfile > pastefile

这个 git repo也有一些其他有用的命令。


fra*_*ous 8

gg"+yG

或者

gg"*yG

取决于 + 或 * 是系统剪贴板。(在许多 unix 上,+ 是鼠标中键单击的鼠标选择缓冲区,* 是系统剪贴板)。


小智 5

对于 Mac,使用 pbcopy(粘贴板复制):

cat file.txt | pbcopy
Run Code Online (Sandbox Code Playgroud)

file.txt 的内容现在位于剪贴板上,可以粘贴到另一个应用程序(例如浏览器)中。

您还可以使用 pbpaste 将剪贴板的内容粘贴到文件中:

pbpaste > file.txt
Run Code Online (Sandbox Code Playgroud)

虽然这并不专门涉及 vi,但它确实在 Mac 上实现了相同的目标。