使用先前命令输出中的文本

Ser*_*sta 16 command-line osx bash io-redirection

编辑 2015 年 4 月:如果您有同样的问题,我建议您也查看http://xiki.org/


我知道这不是终端的工作方式,但我发现自己经常希望有一种简单的方法来使用文本(复制、修改等),这些文本已经存在于我的终端窗口历史记录中,来自之前的一些命令输出。

我是这样想象的:

我正在我的 bash shell 中输入一个命令,但我意识到我需要输入一些已经出现在屏幕上方几行的内容。我可以伸手去拿鼠标并选择它,但我讨厌那样。此刻我真正希望的是我的整个终端变成一个巨大的 Vim 缓冲区,所有这些:提示、我输入的命令以及这些命令的输出。一切。然后我可以跳几行,也许编辑一下,然后猛拉一些文本。然后,返回 bash shell 模式并将我拉到的任何内容粘贴到当前命令行中。

我知道有一些选择:

  • 自然地,将我需要的文本直接从某个命令的输出传送到一个文件,或者直接传送到下一个命令。但是为此,您必须提前计划或重新执行历史记录中的命令(假设输出在调用之间不会改变)。

  • 到达鼠标并选择要复制的文本。跛脚,烦人,我希望我没有这样做,(这不是 GUI stackexchange 站点,是吗?=)

  • 使用我的 (Mac OS X) 终端应用程序的“将文本导出为...”选项,并将终端文本保存到文件中。然后打开文件并使用它。差不多,但是为什么要执行保存到磁盘上的文件的步骤?

所以问题是:在这种情况下你会怎么做?在这种情况下,是否有任何技巧、工具、外壳功能可能有用?您只是辞职使用鼠标还是重新输入您需要输入的内容?

可能是问题在于我不是在以“unix 方式”做事,但是拜托,这是 2010 年,我无法轻松复制距光标几行远的一些文本?

elm*_*rco 5

在 emacs 中,Mx shell处理先前输出的版本。您可以轻松复制粘贴以前的命令输出或缓冲区的任何部分,就像常规缓冲区一样。我很确定应该有一个 vim 等效项。


zvo*_*kov 5

在 tmux(终端多路复用器)中,您可以按 Ctrl+A-[ 切换到 Vi 缓冲区模式,您可以在该模式下在屏幕上导航、来回滚动缓冲区、复制文本等。默认快捷键实际上是 Ctrl+B- [但这显然是要重新配置的。此外,默认的缓冲模式是 Emacs,但您可以将其配置为 Vi。

看看 tmux,它真的是一个很棒的现代终端多路复用器。除了使用缓冲区之外,您还可以在多个窗口中拆分屏幕,从多个终端连接到同一个会话等。为了最终的方便,您甚至可以将其设为登录 shell,如果您告诉它您的实际 shell 是什么。

在 OpenBSD 上,tmux 甚至成为基本系统的一部分。

有关更多详细信息,请参阅 tmux 的手册页。另请参阅http://tmux.sourceforge.net/ 上的屏幕截图


nc3*_*c3b 4

您可以使用脚本(使用 -f 确保它每次都会刷新),并且可以将所有输出放在一个文件中。

使用终端多路复用器(屏幕、tmux 等)。例如,对于屏幕 http://web.mit.edu/gnu/doc/html/screen_11.html#

命令:copy 进入复制/回滚模式。这允许您将当前窗口及其历史记录中的文本复制到粘贴缓冲区中。在此模式下,类似 vi 的全屏编辑器处于活动状态,其控件如下所述。

其他终端多路复用器肯定具有更先进的功能。