将所有行复制到剪贴板

Xin*_*nus 520 vi vim keyboard-shortcuts editor

有没有办法在VI编辑器中将所有行从打开文件复制到剪贴板.我试过,yG但它没有使用剪贴板来存储这些行.

那有可能吗?

Roo*_*ook 650

使用:

:%y+

猛拉所有线路.

说明:

  • % 引用下一个命令来处理所有行
  • y 猛拉那些线
  • + 复制到系统剪贴板

:在Windows中,+而且*是等效的看到这个答案.

  • Vim说`E850:无效的注册名称`:( (214认同)
  • VIM说"E488:尾随字符".然而`:%y`起作用了. (109认同)
  • 这个解决方案只有在使用剪贴板选项编译vim时才有效(在这种情况下,vim --version将显示+剪贴板).如果不是,Brian的解决方案(:%w!pbcopy)是Mac的解决方案.替代品可用于其他操作系统(例如xclip). (16认同)
  • 另外,它不会改变光标位置. (15认同)
  • 我需要`设置clipboard = unnamed`,但这样做效果很好! (6认同)
  • @guangnan:vi 中不存在这些寄存器;仅在 vim 中。尝试输入 `:help` 以确保您确实在 vim 中。 (2认同)
  • 不适用于 Vultr 的 CentOS 7 VPS。我得到“E850:无效的寄存器名称”。`vi --version` 向我显示了 `-clipboard`,但我不知道如何启用它并将其转换为 `+clipboard` (2认同)
  • 如果有人收到“E850:无效的寄存器名称”,请尝试 **:%y"+** 将所有内容复制到剪贴板并 **"+p** 将其粘贴 (2认同)

CMS*_*CMS 589

您应该将文本拉到*+ 注册:

gg"*yG

说明:

  • gg 将光标移动到文件的第一个字符
  • "*y*从第一行开始向寄存器发出一个yank命令,直到......
  • G 去文件的末尾

  • 如果在启用xterm_clipboard的情况下编译,Vim只能访问系统剪贴板.要确定您是否具有此功能,请在vim中运行`:version`,然后查找`+ xterm_clipboard`标志.如果前面有减号,那么您将没有此功能.如果是这种情况,您可能希望自己编译vim,或运行通常启用此功能的gvim. (137认同)
  • 你好...它不工作?剪贴板数据保持不变.当我键入gg光标到第一行...但是当我输入"*yG ..cpu beeps at*..so是正常还是我的vim有些问题?我在Ubuntu上... (8认同)
  • 这种方法的问题在于它移动光标并滚动窗口.两次.[其他答案](http://stackoverflow.com/questions/1620018/vi-editor-copy-all-the-lines-to-clipboard/1620030#1620030)击键次数少得多_and_缺点:) (8认同)
  • 你如何标记文本,使它看起来像键?在SO上我还没有看到. (6认同)
  • 您是否启用了死键?(例如,当你点击 'a 时,你会得到 á)如果是这样,你需要在 `"` 后按空格。 (2认同)
  • 在 Ubuntu 上,如果你的 vim 是在没有 <code>+xterm_clipboard</code> 标志的情况下编译的,你可以安装使用这个标志编译的 vim-gnome。(https://bugs.launchpad.net/ubuntu/+source/vim/+bug/837882) (2认同)

Bri*_*ian 79

在Mac上

  • 复制所选部分:直观地选择文本(类型vV在正常模式下)并键入:w !pbcopy

  • 复制整个文件 :%w !pbcopy

  • 从剪贴板过去 :r !pbpaste

  • 工作顺利.对命令的解释非常好. (5认同)
  • @Geo`pbcopy`是Mac实用程序。在Linux上,可以使用xsel代替,在Windows上可以使用clip。 (5认同)

Tor*_*dek 52

剪贴板是缓冲区+.要复制到剪贴板,请执行"+y和[移动].

所以,gg"+yG会复制整个文件.

同样,要从剪贴板粘贴, "+p

  • 只是为了增加这个(4年后......),这有一个小小的缺点,你的光标位置将跳转到文件的顶部.为了避免这种情况(例如,如果您将其映射到vimrc中的某个快捷方式),您可以执行以下操作:mqgg"+ yG`q (3认同)

Zac*_*ack 41

如果您在使用VI时遇到问题,另一种复制整个文件的简单方法就是输入"cat filename".它会将文件回显到屏幕,然后您可以向上和向下滚动并复制/粘贴.

  • “只是”上下滚动一千行。 (4认同)
  • E603: :catch 没有 :try (2认同)
  • 如果你想在不离开 vim 的情况下做到这一点,你可以运行以下命令:`:!cat %`。并以编程方式将文件内容复制到 Mac OS 上的剪贴板:`:!cat % | pbcopy` (2认同)

小智 30

这就是我整理文件的方法:

ggVGy
Run Code Online (Sandbox Code Playgroud)

  • 我担心这不会回答这个问题,因为你正在查看默认寄存器,而不是剪贴板. (11认同)
  • @ConspicuousCompiler如果他将`clipboard`设置为将被拔出的文本复制到`+`中,它会. (2认同)
  • @TankorSmash 不是最快的(:%y)也不是最简洁的(至少ggyG更好)方法。 (2认同)

小智 11

您可以使用"cat"命令打开文件并使用鼠标进行复制

  • 但这不是"vi"方式,如果文件很大,那么它也会成为一个问题...这可能有效,但不是建议的方式...... (5认同)

Ste*_*tew 10

(回复@rshdev,并避免在OP的评论中每个@nelstrom使用+ xterm_clipboard重新编译vim)

有一个名为xclip的程序,就像在Ubuntu 11上使用putclip一样:

:%!xclip -sel clip
u
Run Code Online (Sandbox Code Playgroud)

它没有默认安装.安装,使用:

sudo apt-get install xclip
Run Code Online (Sandbox Code Playgroud)


Arc*_*Tux 9

在Ubuntu 12上

您可能会尝试安装该vim-gnome软件包:

sudo apt-get install vim-gnome
Run Code Online (Sandbox Code Playgroud)

我试过了,因为vim --version告诉我它会禁用标志xterm_clipboard(用-表示),这是使用剪贴板功能所必需的.

- > 在Ubuntu 12上安装vim-gnome软件包还安装了一个基于控制台的vim版本,启用了此选项(在xterm_clipboard标志之前用+表示)

在Arch Linux上

你可以安装vim-clipboard相同的原因.


小智 8

请复制 vim 或其选项卡中的整个文件

y G 
Run Code Online (Sandbox Code Playgroud)

然后移动到一个选项卡并粘贴

p
Run Code Online (Sandbox Code Playgroud)

并剪切整个文件使用

d G
Run Code Online (Sandbox Code Playgroud)


kev*_*kev 7

gVim:

:set go=a
Run Code Online (Sandbox Code Playgroud)

ggVG

:help go-a

'a' Autoselect:  If present, then whenever VISUAL mode is started,
 or the Visual area extended, Vim tries to become the owner of
 the windowing system's global selection.  This means that the
 Visually highlighted text is available for pasting into other
 applications as well as into Vim itself.  When the Visual mode
 ends, possibly due to an operation on the text, or when an
 application wants to paste the selection, the highlighted text
 is automatically yanked into the "* selection register.
 Thus the selection is still available for pasting into other
 applications after the VISUAL mode has ended.
     If not present, then Vim won't become the owner of the
 windowing system's global selection unless explicitly told to
 by a yank or delete operation for the "* register.
 The same applies to the modeless selection.
Run Code Online (Sandbox Code Playgroud)


pax*_*blo 6

如果您在可视模式下使用Vim,则标准剪切和粘贴键也适用,至少在Windows中是这样.

  • CTRLA 表示"标记整个文件.
  • CTRLC 表示"复制选择.
  • ESC 意思是"取消选择,所以你的下一次按键不会取代整个文件:-)

至少在Ubuntu终端(Gnome)下,标准副本也可以使用(CTRLSHIFTC虽然似乎没有标准的键盘快捷键select all(除了ALTE后面跟A).

  • 但是如果你没有使用mswin.vim,那么ctrl -a会增加当前行的下一个数字. (6认同)

小智 5

:%y a将所有内容拉入 vim 的缓冲区中,p在命令模式下按 会将拉出的内容粘贴到光标当前所在的行之后。


小智 5

您可以按gg将光标定位到文件的开头,然后按yG将所有内容从开头到结尾(G位于)复制到buffer.good运气!


小智 5

我尝试了一些人们上面提到过的命令.没有用.然后我抓住了最简单的一切.

步骤1:vi <filename>
步骤2:右键单击Putty窗口的标题栏
步骤3:选择"清除回滚"(以避免复制其余的SSH会话)
步骤4:再次右键单击并选择"全部复制到剪贴板".