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


16

EDIT,2015年4月:如果您有相同的问题,建议您同时检查http://xiki.org/


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

我已经想象过像这样:

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

我知道有一些选择:

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

  • 触摸鼠标并选择要复制的文本。me脚,烦人,我希望我没有这样做,(这不是GUI stackexchange网站,对吗?=)

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

所以问题是:在这种情况下您会做什么?在这种情况下,是否有任何有用的技巧,工具,shell功能?您是否辞职以使用鼠标或重新键入需要输入的内容?

可能是问题出在,我不是按照“ unix方式”运行,但是请问,这是2010年,我不能轻易地将一些文本复制到距光标几行的地方吗?



Answers:


4

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

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

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

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


好。我刚刚了解到,可能需要“终端多路复用器”。谢谢。另外,感谢“脚本”命令提示。
塞尔吉奥·阿科斯塔

5

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

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

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

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


tmux是最酷的!
gabe。

4

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


1
这与我想要的非常接近,但是我已经需要进入Emacs或Vim。+1
塞尔吉奥·阿科斯塔

是的,它可能是您的默认term + shell。:)然后,您至少要使用通常的文本导航键。如果您了解了更多特殊键,则可以访问Emacs的以下功能eshell
imz-伊万·扎哈拉里舍夫(Ivan Zakharyaschev)2011年



1

尝试使用vim作为CLI?只需从几行中选择输出,然后将其通过:!传递即可。


抱歉,我没有关注您。您能详细说明一下吗?
roaima
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.