如何将GNU Screen复制缓冲区复制到剪贴板?

时间:2013-04-19 18:48:02

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

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

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

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

在我的情况下,我正在使用Ubuntu 12.04与gnome和Xorg。

9 个答案:

答案 0 :(得分:36)

您可以使用xselpbpaste等CLI剪贴板工具和cat实用程序从STDIN中获取内容。使用xsel的Linux上的步骤如下:

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

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

答案 1 :(得分:10)

这个答案适用于OS X.

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

  1. 在任何屏幕窗口中,键入pbcopy <enter>
  2. 然后使用GNU屏幕paste commandCtrl-a ]将文本粘贴到终端中,除非您更改了转义键。)
  3. 如果文字未以换行符结尾,请按<enter>插入一个。
  4. 最后,按Ctrl-d使pbcopy将文本推送到系统剪贴板。
  5. 然后您可以像往常一样使用Command-v或等效的菜单选项将文本粘贴到OS X中的其他位置。

答案 2 :(得分:10)

有一种更简单,更少手动的方法。在屏幕.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. 现在文字将放在剪贴板中。

答案 3 :(得分:8)

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

最简单的方法是将屏幕分成两个区域。您可以通过点击 CTRL + a 然后 | '来实现这一点。这不是我。它是键盘上的PIPE标志'

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

如果你想从nano复制并粘贴到终端,打开左边区域的nano文件,点击 CTRL + a 然后 ESC < / kbd>,滚动到复制位置的起点并点击 SPACE ,通过滚动到终点选择文本并再次点击 SPACE 来标记复制。

现在,您所要做的就是点击 CTRL + a 然后 TAB 切换到右侧区域并点击 CTRL + a 然后]

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

答案 4 :(得分:4)

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

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

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

ta-da!

答案 5 :(得分:0)

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

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

XQuartz设置:

enter image description here

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

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

按cmd + v,应输出“这是测试”。

答案 6 :(得分:0)

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

设置:

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

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

  1. 通过执行 ~/.screenrc CTRL+a :
  2. 在不终止会话的情况下重新加载 source ~/.screenrc

如何使用:

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

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

答案 7 :(得分:-2)

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

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

答案 8 :(得分:-3)

最后,今天我找到了一个鼠标解决方案:

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

https://michalzuber.wordpress.com/2015/01/28/gnu-screen-copy-paste-with-mouse/

处的部分屏幕