如何在vim中选择全部并复制?

45
如何在Vim插入模式下选择所有内容并复制?还有没有其他方法可以在正常模式下完成这个操作?
我已经尝试过使用可视模式、gg和shift+gg来选择所有内容,然后再用yank命令将其复制,但是这不会将其传输到剪贴板,以便在像Skype或Chrome浏览器之类的应用程序中粘贴。
我相信这是一个常见的任务,而且肯定有比我更聪明的人有更多的方法,请随意分享你的经验。
7个回答

38
在正常模式下: gg"+yG 在命令模式下: :%y+ (说明:上述命令用于复制整个文件)

3
在哪里写这个? - Shreyan Mehta
9
首先,你需要进入正常模式(vim 启动时的模式)。如果按下“i”键,就会进入“插入模式”,这是你可以在文件中输入文本的模式。要退出插入模式,请按 Esc 键,你将回到正常模式。从正常模式开始,只需在键盘上键入这个答案中的按键。 gg 将光标移动到文件开头,“+”告诉 vim 接下来的命令应使用剪贴板缓冲区,“y” 告诉 vim 要“复制”一些文本,而 G 告诉 vim 要复制的文本是从当前位置(即文件开头)到文件末尾的所有文本。 - Christopher Shroba
1
@ChristopherShroba 哦,好的,明白了,感谢您的评论。 - Shreyan Mehta

17

你的问题中缺少一些重要信息:

  • $ vim --version 的输出是什么?
  • 操作系统是什么?
  • 使用CLI还是GUI?
  • 本地还是远程?
  • 你使用tmux吗?screen?

如果你的Vim是带有剪贴板支持的版本,你应该像这样在正常模式下使用剪贴板寄存器:

gg"+yG

如果您的Vim没有剪贴板支持,您可以通过其他程序将文本从Vim复制到您的操作系统剪贴板。这在很大程度上取决于您的操作系统,但是因为您没有说明是哪个操作系统,所以我们无法真正提供帮助。

但是,如果您的Vim受损了,最好的方法是安装一个具有剪贴板支持的适当版本,但是我也无法告诉您如何安装,因为我不知道您使用的是哪个操作系统。

编辑

在基于Debian的系统上,以下命令将安装一个具有剪贴板、Ruby、Python等支持的适当版本的Vim。

$ sudo apt-get install vim-gnome

目前使用Mint Linux,希望很快能切换到Tiny Core :) - zotherstupidguy
我在GUI环境中打开了一个控制台,这听起来对你来说合适吗? - zotherstupidguy
本地使用,对于远程我还没有使用 vim :) 需要一些指南来将我的 vimrc 提交到远程主机,上传 shell 脚本并让它完成魔法或者其他事情?我正在考虑一个简单的解决方案,可以适用于任何机器,并且已经准备好为我使用 Vim...我不知道 tmux 是什么?那是什么? - zotherstupidguy
默认的 Vim 是一个“微小”且糟糕的版本。获取适当的 Vim(vim-gnome),你就可以执行 "+y"+p 命令了。 - romainl
我的博客?啊!我忘记把它放在我的个人资料里了。不,我是法国人。 - romainl
显示剩余3条评论

9
ggVG 

将从开始到结束进行选择。


5
如何将内容复制到剪贴板或粘贴缓冲区? - BenDavid
1
按下 y 将选定内容“yank”到剪贴板中,如果您支持剪贴板。 - Mark Stouffer
在Ubuntu中,y键不再起到“yank”的作用。 - gimmegimme

6

@swpd的答案有所改进

我使用,作为前导键,而,a快捷键则可行。

如果您喜欢,a快捷键,请添加此行。

map <Leader>a :%y+<CR> 

我使用Ctrl y快捷键进行复制。
vmap <C-y> y:call system("xclip -i -selection clipboard", getreg("\""))<CR>:call system("xclip -i", getreg("\""))<CR>

复制代码,v并粘贴

nmap <Leader>v :call setreg("\"",system("xclip -o -selection clipboard"))<CR>p

在使用此工具之前您需要安装xclip

$ sudo apt-get install xclip

编辑:当你使用:%y+时,它只能粘贴到Vim vim Ctrl+Insert快捷键。
map <C-a> :%y+<Esc>

不会与我的Vimrc中的任何设置冲突。


Ctrl-y快捷键文本应在第一个<CR>处结束。 - Chris
@Chris,我不明白。你能详细解释一下吗? - guneysus

3
如果你只想从终端内部复制文件内容(你提到“将文本复制到另一个应用程序”),那么cat命令很容易选择/复制输出: cat <文件名>

2

我的方法是使用“cat”命令查看文件内容,然后用鼠标进行选择和滚动,最后使用Mac+C / Ctrl+C或右键单击并选择“复制”来将内容复制到剪贴板。


目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community
我的回答怎么不清楚了?!按照以下步骤操作:先用鼠标选中文件,然后滚动鼠标以获取所有文本,最后使用 Mac+C / Ctrl+C 或右键选择“复制”将其复制到剪贴板。 - doug
最佳答案,节省了很多时间。 - undefined

1

对于 VS Code + vim 您可以:

"vim.useSystemClipboard": true,

然后

ggVGy
  • gg - 跳到文件开头
  • V (大写) - 开始行选择模式
  • G (大写) - 跳到文件结尾
  • y - 复制

在 Ubuntu 22.04 和 Windows 11 中,这对我来说适用于所有应用程序。

gg"+yG 更正确,因为它明确地针对剪贴板(而不是 vim 寄存器),但 "vim.useSystemClipboard": true, + ggVGy 似乎在应用程序之间工作,所以我使用它,因为我更容易输入。


顺便说一下,如果使用 VS Code + vim,则

"vim.useCtrlKeys": false,

允许使用Ctrl+A


不适用于Windows :( - tymtam

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