2015 年 4 月编辑:如果您有同样的问题,我建议您也检查一下http://xiki.org/
我知道这不是终端的工作方式,但我发现自己经常希望有一种简单的方法来使用文本(复制它、修改它等),这些文本已经存在于我的终端窗口历史记录中,来自以前的命令输出。
我想象过是这样的:
我在 bash shell 中准备输入命令,我意识到我需要输入屏幕上几行已经存在的内容。我可以伸手拿鼠标并选择它,但我讨厌这样。我此刻真正希望的是我的整个终端变成一个巨大的 Vim 缓冲区,所有这些:提示、我输入的命令以及这些命令的输出。一切。然后我可以跳几行,也许编辑一下,然后拉一些文本。然后,返回 bash shell 模式并将我拉入的内容粘贴到当前命令行中。
我知道有一些选择:
当然,将我需要的文本直接从某个命令的输出传输到文件,或者直接传输到下一个命令。但为此,您必须提前计划或重新执行历史记录中的命令(假设输出在调用之间不会改变)。
拿起鼠标并选择要复制的文本。蹩脚,烦人,我希望我没有这样做,(这不是 GUI stackexchange 站点,是吗?=)
使用我的 (Mac OS X) 终端应用程序的“将文本导出为...”选项,并将终端文本保存到文件中。然后打开该文件并使用它。几乎,但是为什么要执行保存到磁盘上的文件的步骤呢?
所以问题是:在这种情况下你会做什么?在这种情况下有什么技巧、工具、shell 功能可能有用吗?您是否只是放弃使用鼠标或重新输入您需要输入的内容?
问题可能在于我没有以“unix 方式”做事,但是拜托,这是 2010 年,我无法轻松复制距离光标几行的一些文本?
答案1
在 emacs 中,MX外壳处理先前输出的版本。您可以轻松复制粘贴以前的命令输出或缓冲区的任何部分,就像常规缓冲区一样。我很确定应该有一个 vim 等效项。
答案2
在 tmux(终端多路复用器)中,您可以按 Ctrl+A-[ 切换到 Vi 缓冲区模式,您可以在屏幕上导航、来回滚动缓冲区、复制文本等。默认快捷键实际上是 Ctrl+B- [但这显然是要重新配置的。另外,默认缓冲模式是 Emacs,但您可以将其配置为 Vi。
看看 tmux,它确实是一个很棒的现代终端多路复用器。除了使用缓冲区之外,您还可以在多个窗口中分屏,从多个终端连接到同一会话等。为了最终的方便,如果您告诉它您的实际 shell 是什么,您甚至可以将其设为登录 shell。
在 OpenBSD 上,tmux 甚至成为基本系统的一部分。
有关更多详细信息,请参阅 tmux 的手册页。另请参阅屏幕截图http://tmux.sourceforge.net/
答案3
您可以使用脚本(使用 -f 确保它每次都会刷新),并且可以将所有输出放在一个文件中。
使用终端多路复用器(屏幕、tmux 等)。例如,对于屏幕 http://web.mit.edu/gnu/doc/html/screen_11.html#
命令:copy 进入复制/回滚模式。这允许您将当前窗口及其历史记录中的文本复制到粘贴缓冲区中。在此模式下,类似 vi 的全屏编辑器处于活动状态,其控件如下所述。
其他终端多路复用器肯定具有更先进的功能。
答案4
我使用 urxvt (rxvt-unicode),并且有一个名为 urxvt-keyboard-select 的软件包,如果您可以安装 urxvt,它可能正是您想要的。 Archlinux 包信息(包含指针)在这里: