如何将文本从程序“屏幕”复制到剪贴板?

如何将文本从程序“屏幕”复制到剪贴板?

我想复制一些文本屏幕到我的剪贴板。我知道如何在屏幕上进入复制和粘贴模式,但我希望该文本进入我的剪贴板,以便我可以将其粘贴到浏览器上。

我该怎么做呢?谢谢!

答案1

在大多数程序中,您可以选择文本并按Ctrl+进行复制。粘贴文本可以通过按+C来完成。在终端仿真程序中,+具有特殊含义,默认情况下它会中断(停止)程序。CtrlVCtrlC

您的终端仿真程序可能定义了其他快捷方式。例如,Konsole 和 Gnome Terminal 使用Ctrl+ Shift+C来复制所选文本。或者,选择文本并使用复制选项中的编辑菜单或上下文菜单。

如果程序的输出很大,您可能需要启用回滚缓冲区screen。可以通过将以下行添加到文件来实现~/.screenrc

termcapinfo xterm ti@:te@

答案2

对于原始和肮脏的实现,安装xsel允许命令行与 X 剪贴板交互的软件包,然后将这些行放入您的~/.screenrc

bind > eval writebuf "exec sh -c 'xsel -nbi </tmp/screen-exchange'"
bind y eval "exec sh -c 'xsel -bo >/tmp/screen-exchange'"

然后重新启动screen

现在,当您在复制/回滚模式下选择某些内容,并使用-screen将粘贴缓冲区写入文件时,您可以移动到浏览器并像往常一样粘贴剪贴板的内容(例如使用- )。Ca >CtrlV

反过来,使用Ctrl-在浏览器中复制一些内容,然后使用新命令-C转到screen并读取剪贴板,然后使用 - 将屏幕交换文件读入粘贴缓冲区,最后使用-粘贴到您想要的任何位置。Ca yCa <Ca ]

要使此操作有效,必须正确设置变量DISPLAY,并且您必须有权访问 X 服务器。当您在同一个 X 服务器上运行的终端上时,这不是问题,但如果您screen在虚拟终端(例如 tty1)中运行,则在启动之前,您可能需要xhost +在 X 端运行,或export DISPLAY=:0在终端上运行类似程序screen

如你所见,它并不简单,也不是万无一失的,但我希望它能有所帮助。

这个答案部分灵感来自同步 GNU 屏幕的粘贴缓冲区和 X 选择

答案3

只需在终端应用程序中使用复制操作即可。例如,如果您使用的是 gnome-terminal,只需选择测试并使用上下文菜单 -> 复制。

答案4

在 Ubuntu 22.04 中,将其添加到~/.screenrc

bind "^K" screen bash -c "nohup >/dev/null 2>&1 xclip -selection clipboard /tmp/screen-exchange"

请注意,这会将默认的 kill 命令重新绑定C-a C-k到更适合 Emacs 用户的习惯命令。

也可以看看在 Tmux 中做同样的事情的类似答案

然后重新启动屏幕或使用 获取文件C-a : source ~/.screenrc RET

现在输入C-a C-k的内容将会复制/tmp/screen-exchange到剪贴板。

例如,从打开的screen,您可以像这样使用它:

  • 键入C-a ESC Y以将当前行复制到粘贴缓冲区
  • 键入C-a >以将粘贴缓冲区复制到/tmp/screen-exchange
  • 输入C-a C-k要复制/tmp/screen-exchange到剪贴板的内容

为了将所有内容都包含在复制模式下可用的一个命令中,您还可以添加以下内容~/.screenrc

bindkey -m "^K" eval "stuff '>'" "screen bash -c 'nohup >/dev/null 2>&1 xclip -selection clipboard /tmp/screen-exchange'"

那么使用就更加简单了:

  • 进行选择,例如键入C-a ESC SPC w以选择一个单词
  • 键入C-k以将其复制到剪贴板

相关内容