【问题标题】:Copy all the lines to clipboard将所有行复制到剪贴板
【发布时间】:2010-12-09 20:28:20
【问题描述】:

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

那么有可能吗?

【问题讨论】:

标签: vim editor keyboard-shortcuts vi


【解决方案1】:

用途:

:%y+

拉出所有行。

解释:

  • % 参考下一条命令以处理所有行
  • y 拉出这些行
  • + 复制到系统剪贴板

注意:在 Windows 中,+* 等效于 see this answer

【讨论】:

  • 另外它不会改变光标位置。
  • 我需要set clipboard=unnamed,但是效果很好!
  • Vim 说E850: Invalid register name:(
  • 此解决方案仅在 vim 使用剪贴板选项编译时有效(在这种情况下,vim --version 将显示 +clipboard)。如果不是,Brian 的解决方案 (:%w !pbcopy) 是适用于 Mac 的解决方案。其他操作系统也有替代品(例如 xclip)。
  • 如果有人收到E850: Invalid register name,请尝试 :%y"+ 将所有内容复制到剪贴板并 "+p 粘贴跨度>
【解决方案2】:

您应该将文本拉到*+ registers

gg"*yG

解释:

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

【讨论】:

  • 如何标记文本使其看起来像键?我还没有在 SO 上看到。
  • 您好...它不工作?剪贴板数据保持不变。当我输入 gg 时,光标转到第一行...但是当我输入“*yG ..cpu 在* ..处发出哔哔声时,这是正常的还是我的 vim 有问题?我在 Ubuntu 上..
  • 您是否启用了死键? (例如,当你点击 'a 你得到 á)如果是这样,你需要在 " 之后按空格。
  • Vim 只有在编译时启用了 xterm_clipboard 才能访问系统剪贴板。要确定您是否有此功能,请在 vim 中运行 :version,然后查找 +xterm_clipboard 标志。如果它前面有一个减号,那么您将没有此功能。如果是这种情况,您可能需要自己编译 vim,或者运行通常启用此功能的 gvim。
  • 这种方法的问题是它会移动光标并滚动窗口。两次。 other answer 的击键次数要少得多缺点:)
【解决方案3】:

在 Mac 上

  • 复制所选部分:可视选择文本(正常输入vV 模式)并输入:w !pbcopy

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

  • 从剪贴板过去:r !pbpaste

【讨论】:

  • 工作顺利。对命令的解释会非常好。
  • @Geo pbcopy 是一个 Mac 实用程序。在 Linux 上,xsel 可以代替,或者在 Windows 上clip
  • 如果文件长于终端的高度,这将不起作用。
  • @SridharSarnobat :%w !pbcopy 如果文件长于终端高度,仍然有效。
  • 哦,抱歉,我的意思是通过 ssh,客户端是 Mac,服务器是 Linux(我认为这是 OP 正在寻找的东西,但现在我想起来了,这是一个不相关的问题) .在我的辩护中,我会避​​免使用 vim 来复制和粘贴本地文件,但这是我个人的喜好。很好的提示。
【解决方案4】:

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

所以,gg"+yG 将复制整个文件。

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

【讨论】:

  • 只是补充一下(4 年后...),这有一个小缺点,您的光标位置会跳到文件的顶部。为避免这种情况(例如,如果您将其映射到 vimrc 中的某个快捷方式),您可以执行以下操作:mqgg"+yG`q
【解决方案5】:

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

【讨论】:

  • E603: :catch without :try
  • 如果你想在不离开 vim 的情况下这样做,你可以运行以下命令::!cat %。并以编程方式将文件的内容复制到 Mac OS 上的剪贴板::!cat % | pbcopy
  • 需要将文件从 Windows 上的 Ubuntu VM 复制到在浏览器窗口中打开的 GCP 中的 Debian... :/ vim yanking 的变体不起作用,这可以粘贴到 Windows 然后将文件上传到 GCP。
  • 这是直截了当的方法,我喜欢它。
  • “只是”上下滚动一千行。
【解决方案6】:

这是我拉整个文件的方法:

ggVGy

【讨论】:

  • 恐怕这不能回答这个问题,因为你正在拉到默认寄存器,而不是剪贴板。
  • @ConspicuousCompiler 如果他将clipboard 设置为将被拉出的文本复制到+ 中。
  • @TankorSmash 不是最快的 (:%y) 也不是最整洁的(至少 ggyG 更好)的方法。
  • @ConspicuousCompiler default registerclipboard有什么区别?
【解决方案7】:

您可以使用“cat”命令打开文件并使用鼠标复制

【讨论】:

  • 但这不会是“vi”的方式,如果文件很大,那么它也将是一个问题......这可能有效但不是建议的方式......
  • reset 终端,然后全选复制。这适用于ssh 会话。
  • 如果xterm_clipboard不可用,不同远程服务器中大文件(1万行以下)的最快方法
  • 简单易行的解决方案
【解决方案8】:

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

有一个名为 xclip 的程序,其工作方式类似于 Ubuntu 11 上的 putclip:

:%!xclip -sel clip
u

默认情况下不安装。安装,使用:

sudo apt-get install xclip

【讨论】:

  • 这也适用于 vi,而不仅仅是 vim。 ESC :version 在 Linux 上,即使您键入的是“vi”,您也可能没有运行。
【解决方案9】:

在 Ubuntu 12 上

您可以尝试安装 vim-gnome 包:

sudo apt-get install vim-gnome

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

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

在 Arch Linux 上

出于同样的原因,您可以安装 vim-clipboard

如果你运行neovim,那么你应该安装xclip(如help clipboard-tool所解释)

【讨论】:

【解决方案10】:

你可以按 gg 将光标定位到文件的开头,然后按 yG 将所有内容从头到尾(G 位于)复制到缓冲区。祝你好运!

【讨论】:

    【解决方案11】:

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

    • CTRLA 表示“标记整个文件。
    • CTRLC 表示“复制所选内容。
    • ESC 表示“取消选择,因此您的下一次按键不会替换整个文件:-)

    至少在 Ubuntu 终端 (Gnome) 下,标准副本也可以工作 (CTRLSHIFTC,尽管似乎没有是 select all 的标准键盘快捷键(除了 ALTE 后跟 A)。

    【讨论】:

    • 但是如果你没有使用 mswin.vim,那么 ctrl-a 会增加当前行的下一个数字。
    • @Mark,这种行为来自标准的 Vim 安装,所以我认为这是默认设置。如果环境配置不同,那么所有的赌注都会被取消,但如果是这种情况,我怀疑 OP 会知道他们在做什么 :-) 在任何一种情况下,OP 在评论中都表示他们在 Ubuntu 上,所以 Windows 部分我的回答可能不适用。 Gnome 终端的东西会。
    【解决方案12】:

    将整个文件复制到 vim 或其选项卡中

    y G 
    

    然后移动到标签并粘贴

    p
    

    并剪切整个文件使用

    d G
    

    【讨论】:

      【解决方案13】:

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

      【讨论】:

        【解决方案14】:

        gVim:

        :set go=a
        

        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.
        

        【讨论】:

          【解决方案15】:

          我尝试了人们上面提到的一些命令。没有工作。 然后我掌握了其中最简单的一个。

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

          【讨论】:

          • 对于 15000 行文件,这并没有抓住它。我需要将 Putty 的 Window > Settings > lines of scrollback 增加到 40000(也可以通过右键单击标题栏获得)。它还有助于使用cat 而不是 vi,因为它会滚动所有文本。
          • 我最终总是以这种方式丢失文件顶部和底部的行。我现在做的是cat,然后在文件的开头和结尾处中键来扩展选择。
          • 当我尝试这个时,屏幕上只有 111 行,但我的文件中有 174 行,所以 Noumenon 的猫回答对我有用
          【解决方案16】:

          Bill Joy 的 vi 中没有“剪贴板”的概念,所以我认为没有内置的方法可以做到这一点。

          gVim 的自动将任何突出显示的内容复制到剪贴板功能最简单,或者通过 :! 使用外部程序!

          我使用 Cygwin 的 vim

          :%!putclip
          u
          

          也许 Ubuntu 有一个像 putclip 这样的 CLI 应用??

          【讨论】:

          • 很好的建议,谢谢!有这样一个程序,叫做xclip。有关详细信息,我发布了一个单独的答案(如果没有额外的换行符和代码格式,从评论中阅读会太混乱)。
          【解决方案17】:

          嗯,所有这些方法都很有趣,但是作为懒惰的程序员,我通过使用数字 + y 的组合来使用 yank all line

          例如你有一个总共78行的源代码文件,你可以这样做:

          1. gg 在第一行获取光标
          2. insert 78 + y --> 它在光标和当前行下方拉出 78 行

          【讨论】:

            【解决方案18】:

            我已在我的 .vimrc 中添加了以下行

            nnoremap <F5> :%y+<CR>
            

            这允许我通过按F5(在命令模式下)将 Vim 中的所有文本复制到剪贴板。

            【讨论】:

              【解决方案19】:

              如果您的手指默认为CTRL-A CTRL-C,请尝试从$VIMRUNTIME/mswin.vim 映射。

              " CTRL-C and CTRL-Insert are Copy
              vnoremap <C-C> "+y
              
              " CTRL-A is Select all
              noremap <C-A> gggH<C-O>G
              inoremap <C-A> <C-O>gg<C-O>gH<C-O>G
              cnoremap <C-A> <C-C>gggH<C-O>G
              onoremap <C-A> <C-C>gggH<C-O>G
              snoremap <C-A> <C-C>gggH<C-O>G
              xnoremap <C-A> <C-C>ggVG
              

              我已将它们映射到 &lt;Leader&gt;&lt;C-a&gt;&lt;Leader&gt;&lt;C-c&gt;

              【讨论】:

                【解决方案20】:

                我知道这应该解决十年,但前两个答案对我不起作用,所以我一直在挖掘。在 Redhat(远程服务器)- Windows 10(本地计算机)上,如果您无法用鼠标选择整个内容,您将被卡住,因为通常的副本在远程计算机和本地计算机剪贴板之间不起作用。

                所以,要在远程 Linux 上复制并在本地 Windows 上粘贴,请使用 * 指定主缓冲区并执行漂亮的双击操作

                使用 gg" * yy kbd>.

                【讨论】:

                  【解决方案21】:

                  这是一个使用 CTRL+a 将所有内容全选到剪贴板的映射命令:

                  "
                  " select all with control-a
                  "
                  nnoremap <C-a> ggmqvG"+y'q
                  

                  将它添加到您的 .vimrc 中,您就可以开始了...

                  【讨论】:

                    【解决方案22】:

                    你可以使用一个shortcur,比如这个:

                    noremap <F6> :%y+<CR>
                    

                    这意味着,当您在普通模式下按 F6 时,它将复制整个文件,并将其添加到剪贴板。 或者你可以在普通模式下输入:%y+,然后推送Enter

                    【讨论】:

                      【解决方案23】:

                      虽然上面的许多答案都很好,但这些解决方案都不适合我,因为我使用的是 Ubuntu 16.04 附带的默认 VIM 安装,并且默认情况下没有安装剪贴板选项。我还想将文本粘贴到外部程序中。

                      有效的解决方案:Ubuntu 的默认终端允许您通过按 Edit 然后按 Select All 突出显示全部内容。

                      【讨论】:

                        【解决方案24】:

                        我已经创建了一个函数来执行这个操作,把它放在你的~/.vimrc上。

                        fun! CopyBufferToClipboard()
                            %y+
                        endfun
                        nnoremap <Leader>y :call CopyBufferToClipboard()<CR>
                        command! -nargs=0 CopyFile :call CopyBufferToClipboard()
                        

                        OBS:如果您使用的是 neovim,您还需要一些剪贴板管理器,例如 xclip。更多信息请输入 neovim :h checkhealth

                        同样重要的是要提到并非总是一个简单的y 会复制到剪贴板,为了使每个复制提要+ 即“剪贴板寄存器”尝试设置::set clipboard=unnamed,unnamedplus。有关更多信息,请参阅::h unnamed

                        Here 更多关于 vim wikia 的信息。

                        【讨论】:

                          【解决方案25】:

                          我在 PowerShell 中使用 Vim,当我需要将 一小段代码 复制到 Windows 剪贴板时;

                          我使用:set nonumber 删除行号,然后用光标直观地选择代码并右键单击。然后我用 Ctrl + V 将它粘贴到我想要的任何位置。

                          【讨论】:

                            【解决方案26】:

                            我无法使用上面的答案复制文件,但我有腻子,我在 Quora 上找到了解决方法。

                            1. 更改 PuTTY 会话的设置,转到日志记录并将其更改为“可打印字符”。设置日志文件
                            2. 对各自的文件做猫
                            3. 转到您在第 1 步中设置的文件,您的内容将包含在日志文件中。

                            注意:它将该会话的所有打印字符复制到日志文件中,因此最终会变大。在这种情况下,请删除日志文件并对目标文件进行分类,以便将该特定文件的内容复制到您的计算机上。

                            【讨论】:

                              【解决方案27】:

                              单击鼠标左键,拖过要复制的部分并释放。代码会自动复制到剪贴板。

                              【讨论】:

                              • 文件可能很大,用鼠标拖动整个文本是没有效率的(也不是vi 方式)。
                              • 实际上这是一个很好的答案,对我有用。在我的系统中,环境是 v 限制性的。我必须在屏幕上显示输出,然后使用鼠标拖动、选择和释放..然后我复制到 Windows Notepad++.. 效果很好。没有其他工作。
                              • 不是复制到剪贴板而是复制到主选区,不一样。
                              猜你喜欢
                              • 2017-09-16
                              • 2023-02-20
                              • 1970-01-01
                              • 2011-04-26
                              • 1970-01-01
                              • 1970-01-01
                              • 2017-05-15
                              • 1970-01-01
                              • 2020-02-06
                              相关资源
                              最近更新 更多