如何将多页文本从终端复制到剪贴板?

Muh*_*ana 16 less man copy-paste clipboard

我正在我的机器上查看一个软件的手册页,我需要复制粘贴一些文本,但文本远不止一页。我知道我可以将输出定向到文件并使用基于 UI 的软件(例如gedit)来复制我需要的文本。但这可以从终端完成吗?

Joseph建议了一个命令行方法(对我来说有点复杂,我还不太擅长 Linux 上的正则表达式)。但我想知道是否有办法在我还在终端上时使用 mouse来做到这一点。

我希望我得到一个通用的答案,但是,我使用的是 Ubuntu。

小智 11

我有一些不完美但可能有用的想法。

方法 1 - 老鼠。

使用终端滚动条。

详细信息(假设xterm;其他终端需要调整。)

  1. 如果尚未启用滚动条,请启用它。(在 中xterm,它位于您使用 Ctrl+Button2 获得的菜单中。)
  2. 确保less没有使用该-c选项运行(我在我的LESS环境变量中启用了此选项,但它会干扰我们将要执行的操作,因此我必须键入-c以将其关闭。)
  3. 使用less您喜欢的任何命令,向上或向下滚动,以便您要复制的第一行在屏幕上可见。
  4. 三重Button1你选择的起跑线来选择它。
  5. 向下滚动,直到您要复制的最后一行在屏幕上可见。您必须只使用空格键或其他简单的滚动键,而不是/搜索 - 这里的重点是less将所有行发送到终端,以便可以复制它们。
  6. 在您选择的结束线上的 Button3 以扩展选择。

可能的困难:您的回滚缓冲区可能不够大。可以xterm使用saveLines资源或-sl命令行选项更改它,但我不知道在已经运行的 xterm 中更改它的方法。

方法 2 - 非鼠标。

使用|(pipe) 命令less将文本发送到xclip.

细节:

  1. 使用less您喜欢的任何命令,向上或向下滚动以将要复制的最后一行放置在屏幕顶部。如果想一直复制到最后,可以跳过这一步和下一步。
  2. 使用m(mark) 命令在您选择的结束位置设置一个标记。标记本身就是一个有用的功能,您应该已经从 中了解它们vi,但以防万一:mx设置一个标记,其中x可以是任何字母,并'x稍后返回给您。
  3. 现在向上滚动,以便您要复制的第一行位于屏幕顶部。
  4. 使用管道命令:|x它会提示您输入外部命令。本x应该是相同的标记字母您在使用m命令,或$为“一路到底”。键入xclip那里。

复制整个手册页的简单情况减少到g|$xclipEnter.

警告(即刚刚发生在我身上的可怕事情):xclip将是半背景的,作为less进程组的一部分运行。如果您尝试挂起less,在同一终端上启动另一个作业,然后粘贴到其中,它将无法工作。然后,当您稍后将man/less作业置于前台时,粘贴会突然通过。我认为这应该被视为一个xclip错误......

  • 如果 Mac 用户没有安装 xclip,他们可以使用 pbcopy。 (2认同)

Jos*_* R. 2

正如Nixcraft 上所述:

  1. 得到xclip

    sudo apt-get install xclip 
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    yum install xclip
    
    Run Code Online (Sandbox Code Playgroud)

    在基于 RPM 的系统上。

  2. man man | your_magic_here | xclip -selection clipboard
  3. Ctrl+V随心所欲。您可以-selection clipboard通过单击鼠标中键来删除选择粘贴(称为主要选择)。

请注意,这your_magic_here是文本过滤器的占位符(sed/ awk/ perl/...),它根据您的具体用例选择手册页的所需部分,您没有描述,所以恐怕我无法具体说明举个例子。