76

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

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

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

在我的例子中,我使用 Ubuntu 12.04 和 gnome 和 Xorg。

4

9 回答 9

46

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

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

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

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

于 2013-04-29T19:25:36.280 回答
15

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

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

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

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

现在,您所要做的就是点击CTRL+ athenTAB切换到您右侧的区域并点击CTRL+ athen ]

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

于 2017-05-08T10:27:14.490 回答
13

这个答案适用于 OS X。

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

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

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

于 2014-08-18T17:32:11.757 回答
13

有一种更简单、更少手动的方法可以做到这一点。在您的屏幕 .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"'

于 2016-12-10T00:18:02.227 回答
6

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

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

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

达达!

于 2020-04-01T01:12:16.857 回答
0

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

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

XQuartz 设置:

在此处输入图像描述

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

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

按 cmd + v 并应输出“这是一个测试”。

于 2019-03-07T04:52:11.123 回答
0

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

设置:

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

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

  1. 通过执行重新加载~/.screenrc而不杀死您的会话CTRL+a : source ~/.screenrc

如何使用:

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

注意:使用 a 完成复制非常重要,space因为这是该bindkey命令用于映射的内容win32yank

于 2021-05-25T17:18:34.733 回答
-1

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

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

于 2013-04-19T19:46:57.310 回答
-4

今天终于找到了一个鼠标解决方案:

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

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

于 2015-01-28T09:08:31.487 回答