【问题标题】:How to copy the GNU Screen copy buffer to the clipboard? [closed]如何将 GNU Screen 复制缓冲区复制到剪贴板? [关闭]
【发布时间】:2013-04-13 06:08:23
【问题描述】:

当使用 GNU Screen 时,我们可以使用 Ctrl+a+[ 命令使用 回滚缓冲区 也称为 “复制模式”

在那里,我们可以通过按space 选择文本并再次按space 将文本复制到复制缓冲区

有没有办法将此文本从屏幕复制缓冲区复制到 X 剪贴板?

就我而言,我使用的是 Ubuntu 12.04 与 gnome 和 Xorg。

【问题讨论】:

    标签: linux terminal copy-paste gnu-screen gnome-terminal


    【解决方案1】:

    您可以使用 CLI 剪贴板工具(如 xselpbpastecat 实用程序从 STDIN 获取内容。在Linux上xsel的步骤如下:

    1. 将屏幕会话中的文本复制到 GNU 屏幕的复制缓冲区中。
    2. 在屏幕内运行此命令:cat | xsel -b
    3. 如果xsel 没有报告任何错误,现在将屏幕的复制缓冲区转储到STDIN:Ctrl+a+]
    4. 发送 EOF 到 cat 以终止它:Ctrl+d

    此时,屏幕复制缓冲区的内容应该在剪贴板中。

    编辑:与所有 X 程序一样,xsel 需要知道如何联系您的 X 服务器才能访问剪贴板。您应该适当地设置您的 DISPLAY 环境变量。

    【讨论】:

    • 当心,如果你不知道你在做什么(比如我自己)!当我从 shell 运行 cat | xsel -b 时,它执行了我的整个历史记录。
    • @yekta 是的,为了使用 xsel,您需要有一个带有剪贴板的 X 显示器,并且设置了 DISPLAY 环境变量。大多数终端仿真器都会设置这个,ssh -X 也一样。由于未设置,xsel 在接受输入之前失败,因此管道退出,屏幕缓冲区中的其余“击键”进入您的 shell。
    • cat | xsel -b 中的cat 是将xsel 的输入连接到管道(而不是tty)并触发xsel 的“输入”的一种可爱方式模式;但是xsel-i 标志来显式触发输入模式。所以xsel -bi 可能比cat | xsel -b 更可取。
    • 我发现了一种不那么手动的方法。请参考下面我的回答。
    • 使用xsel 的MacOS 等价物是pbcopy,而不是pbpaste,后者是另一种方式(将剪贴板转储到标准输出)。
    【解决方案2】:

    此答案仅适用于您的最终目标是立即粘贴复制的缓冲区内容的情况。

    最简单的方法是将屏幕分成两个区域。你可以通过点击 CTRL+a 然后 |'This is not an i.这是键盘上的 PIPE 标志'

    CTRL+a 然后按 TAB 切换到第二个区域,CTRL+a 然后 c 在第二个区域创建一个新会话。

    如果你想从 nano 复制并粘贴到终端,请在左侧区域的 nano 中打开文件,点击 CTRL+a 然后 ESC,滚动到复制位置的起点并点击SPACE,滚动到终点选择文本并再次点击SPACE 以标记复制。

    现在,您只需按 CTRL+a 然后按 TAB 切换到您右侧的区域并按 CTRL+a 然后 ].

    您的文本将被写入命令行。请注意,如果您想直接写入文件,也可以检查硬拷贝选项。

    【讨论】:

    • 这是如何使用复制模式的说明。 OP 已经知道如何使用复制模式:问题是如何将数据从复制模式缓冲区移动到系统剪贴板。这不是对所提问题的回答。
    • @Benubird - 我知道。但我给了他另一种选择,让他去我认为他需要去的地方,那就是复制粘贴。帮助了某人!
    【解决方案3】:

    这个答案适用于 OS X。

    使用copy mode 将所需文本复制到 GNU 屏幕粘贴缓冲区后,执行以下操作:

    1. 在任何屏幕窗口中,输入pbcopy <enter>
    2. 然后使用 GNU 屏幕 paste commandCtrl-a ],除非您更改了转义键)将您的文本粘贴到终端。
    3. 如果文本没有以换行符结尾,请按<enter> 插入一个。
    4. 最后,按Ctrl-d 使pbcopy 将文本推送到系统剪贴板。

    然后您可以像往常一样使用Command-v 或等效的菜单选项将文本粘贴到 OS X 的其他位置。

    【讨论】:

      【解决方案4】:

      有一种更简单且手动操作更少的方法来执行此操作。在您的屏幕 .rc 文件中,添加以下行:

      bindkey -m ' ' eval 'stuff \040' 'writebuf' 'exec sh -c "/usr/bin/pbcopy < /tmp/screen-exchange"'
      

      如何使用复制功能:

      1. screen -c path/to/screen/config.rc
      2. 按 Ctrl+A 然后按 Esc 进入复制模式。
      3. 向上滚动文本缓冲区并找到要保留起始标记以进行复制的位置,然后按空格键。
      4. 向下滚动并选择要复制的文本。完成后,再次按空格键。
      5. 文本现在将出现在您的剪贴板中。

      编辑: 在没有 pbcopy 但有 clipit 的 Linux 上,您可以使用如下:

      bindkey -m ' eval 'stuff \040' 'writebuf' 'exec sh -c "/bin/cat /tmp/screen-exchange | /bin/clipit"'

      【讨论】:

      • 在 Debian 中是否有类似的方法?喜欢简单。
      • 我在 windows 中使用 putty 并使用 screen 登录 Linux。但是我正在使用的 Linux 上没有 pbcopy。我可以在这里做什么来将文本复制到我的剪贴板中?
      • 同样可以在 debian 中使用 clipit 完成。 sh -c "/tmp/screen-exchange | 剪辑"
      • 在 ubuntu 18.04.4 上,我必须将 /bid/clipit 更改为 /usr/bin/cliptit,并且我必须安装 libcanberra-gtk-module
      • 当我第一次阅读它时,这对我来说并不明显。但这里最大的区别在于,此解决方案会将文本复制到剪贴板,而不仅仅是屏幕的复制缓冲区。允许您粘贴任何应用程序,而不仅仅是在屏幕会话/终端中运行的应用程序
      【解决方案5】:

      由于似乎没有人直接回答这个问题:

      将所需的输出复制到缓冲区后,您需要

      1. 使用新文件打开文本编辑器,即vim somefile.txt
      2. 进入编辑模式,即 vim 中的i
      3. Ctrl + a,然后按],这会将您刚刚填充的缓冲区的内容转储到文本编辑器中

      哒哒!

      【讨论】:

      • 这太棒了!你是怎么想出来的?
      • @Ray Skillz 兄弟
      【解决方案6】:

      如果您当前连接到服务器,请退出您的 ssh 终端会话。

      如果您在 Mac OS 上使用 XQuartz,在服务器上使用 xsel。您应该通过在 xQuartz 应用程序菜单中选择 Preferences 来更新 XQuartz 粘贴板设置。

      XQuartz 设置:

      ssh 进入远程机器并尝试运行:

      xsel -p <<<"THIS IS A TEST".
      

      按 cmd + v 应该会输出“THIS IS A TEST”。

      【讨论】:

        【解决方案7】:

        我想要一种类似于@kungfuspider 的编程方式,并调整了他们的解决方案以适用于在 Windows 上运行的 Ubuntu WSL。

        设置:

        1. 下载win32yank executable并将win32yank.exe放在有用的地方(我在/usr/binln -s &lt;path to exe&gt; /usr/bin/win32yank中创建了一个指向它的符号链接)
        2. 将以下内容放入~/.screenrc(来自@kungfuspider)。您可能需要修改命令以指向正确的 catwin32yank 位置。

        bindkey -m ' ' eval 'stuff \040' 'writebuf' 'exec sh -c "cat /tmp/screen-exchange | win32yank -i --crlf"'

        1. 通过执行 CTRL+a : source ~/.screenrc 重新加载 ~/.screenrc 而不会终止会话

        如何使用:

        1. 使用CTRL+a 进入复制模式[
        2. 使用 vim 风格的键移动或箭头键移动
        3. 点击space开始选择文本
        4. 再次点击space 突出显示所需的文本并完成复制,文本现在应该在您的 Windows 剪贴板中,并且可以通过右键单击将其粘贴回 Ubuntu。

        注意:使用space 完成复制非常重要,因为bindkey 命令用于映射win32yank

        【讨论】:

          【解决方案8】:

          如果您想要复制的只是一点点信息,只需用鼠标突出显示它,然后将其粘贴到您想要的位置。

          如果您尝试获取大量信息,则可以将屏幕会话记录到文件中,然后您可以从文件中复制或稍微清理一下,并将其用于操作说明

          【讨论】:

          • 我试图避免使用鼠标来提高我的工作流程的速度,通常它不会提供太多信息。谢谢你的回答!
          • 好的。屏幕中的复制/粘贴缓冲区仅在屏幕窗口之间。因此,您可以拥有另一个窗口并将其复制粘贴到另一个窗口或将其粘贴到文件中。
          • 将整个会话记录到文件中似乎是某些情况下最简单和最好的方法。知道如何做到这一点会很有帮助。
          【解决方案9】:

          今天终于用鼠标找到了解决办法:

          按住 Ctrl 并用鼠标右键单击。 出现复制/粘贴上下文菜单。

          https://michalzuber.wordpress.com/2015/01/28/gnu-screen-copy-paste-with-mouse/的一些屏幕

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-21
          • 2011-09-27
          • 2012-07-29
          • 1970-01-01
          • 1970-01-01
          • 2011-04-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多