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

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

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 緩衝區模式,您可以在螢幕上導航、來回滾動緩衝區、複製文字等。 +B- [但這顯然是要重新配置的。另外,預設緩衝模式是 Emacs,但您可以將其配置為 Vi。

看看 tmux,它確實是一個很棒的現代終端多路復用器。除了使用緩衝區之外,您還可以在多個視窗中分屏,從多個終端連接到同一會話等。為登入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 套件資訊(包含指標)在這裡:

https://aur.archlinux.org/packages.php?ID=39950

原始來源: http://www.github.com/muennich/urxvt-perls

相關內容