Bash

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

  • February 9, 2018

編輯 2015 年 4 月:如果您有同樣的問題,我建議您也檢查一下http://xiki.org/


我知道這不是終端的工作方式,但我發現自己經常希望有一種簡單的方法來使用文本(複製、修改等),這些文本已經在我的終端視窗歷史記錄中,來自之前的一些命令輸出。

我想像過它是這樣的:

我在我的 bash shell 中即將輸入一個命令,我意識到我需要輸入一些已經在螢幕上幾行的內容。我可以伸手去拿滑鼠並選擇它,但我討厭這樣。此刻我真正希望的是我的整個終端變成了一個巨大的 Vim 緩衝區,所有這些:提示、我輸入的命令以及這些命令的輸出。一切。然後我可以跳幾行,也許編輯一點,然後拉一些文本。然後,返回 bash shell 模式並將我拉出的任何內容粘貼到目前命令行中。

我知道有一些選擇:

  • 自然地,將我需要的文本直接從某個命令的輸出傳送到文件,或者直接傳送到下一個命令。但是為此,您必須提前計劃或重新執行歷史記錄中的命令(假設輸出在呼叫之間不會改變)。
  • 伸手去拿滑鼠並選擇要複製的文本。蹩腳,煩人,我希望我沒有那樣做,(這不是 GUI stackexchange 站點,是嗎?=)
  • 要使用我的 (Mac OS X) 終端應用程序的“將文本導出為…”選項,並將終端文本保存到文件中。然後打開文件並使用它。差不多,但是為什麼要通過保存到磁碟上的文件的步驟呢?

所以問題是:在這種情況下你會怎麼做?在這種情況下是否有任何技巧、工具、shell 功能可能有用?您是否只是辭職使用滑鼠或重新輸入您需要輸入的任何內容?

問題可能是我沒有以“unix 方式”做事,但是來吧,這是 2010 年,我不能輕易地將一些文本複製到離游標幾行的地方?

在 emacs 中,Mx shell處理先前輸出的版本。您可以輕鬆複製粘貼以前的命令輸出或緩衝區的任何部分,如正常緩衝區。我很確定應該有一個 vim 等價物。

在 tmux(終端多路復用器)中,您可以按 Ctrl+A-[ 切換到 Vi 緩衝區模式,您可以在其中導航螢幕、來回滾動緩衝區、複製文本等。預設快捷方式實際上是 Ctrl+B- [但這顯然是要重新配置的。此外,預設緩衝區模式是 Emacs,但您可以將其配置為 Vi。

查看 tmux,它確實是一個很棒的現代終端多路復用器。除了使用緩衝區之外,您還可以在多個視窗中拆分螢幕,從多個終端連接到同一個會話等。為了最終方便,如果您告訴它您的實際外殼是什麼,您甚至可以將其設為您的登錄外殼。

在 OpenBSD 上,tmux 甚至成為了基礎系統的一部分。

有關更多詳細資訊,請參見 tmux 的手冊頁。另請參閱http://tmux.sourceforge.net/上的螢幕截圖

引用自:https://unix.stackexchange.com/questions/385