如何在 BASH 中循環執行反向搜尋?

如何在 BASH 中循環執行反向搜尋?

在終端機中,我可以輸入Ctrl+R來搜尋先前在 BASH 中輸入的匹配命令。例如,如果我輸入Ctrl+ Rthen grep,它會列出我的最後一個grep命令,我可以按 Enter 來使用它。但這只給了一個建議。有沒有辦法循環瀏覽其他先前輸入的匹配命令?

答案1

如果我正確理解了這個問題,您應該能夠透過反覆點擊Ctrl+來循環選擇選項R

例如:

  • Ctrl+R
  • grep
  • Ctrl+R
  • Ctrl+ R ...

這會向後搜尋你的歷史。要向前搜索,請使用Ctrl+ S,但您可能需要在此之前設定:(stty -ixon透過.bash_profile或手動)以停用接管Ctrl+的 XON/XOFF 功能S。如果無論如何發生,請使用Ctrl+Q重新啟用螢幕輸出(更多詳細信息這裡.)

答案2

如果你覺得該指令會經常使用,你可以加上一個標籤

command #useful

然後

Ctrl+R #useful

這是有效的,因為#是註釋分隔符,即符號後面的所有內容都不會解釋為命令。但是,它會被記錄在歷史中,因此可以搜尋。

答案3

您也可以透過將這些行新增至 ~/.inputrc 來設定向上和向下箭頭來執行稍微不同的搜尋:

"\e[A": history-search-backward
"\e[B": history-search-forward

而不是在命令中的任何位置搜尋子字串(例如Ctrl-r)它將搜尋命令從遊標左側的文字開始。例如,如果我執行這些命令:

$ ls bart
$ ls fools

然後鍵入ls並按Up兩次,它將顯示ls bart和遊標在同一位置。與Ctrl-相比r,它會ls在最後一行中找到兩次,因此您必須再次按它才能找到上一行。

這些方法都有各自的優點,而且都可以節省大量時間。

答案4

有內建的替代品Ctrl + R叫做哈斯特。它允許同時搜尋與所有搜尋標記相符的命令歷史記錄(除其他外),並使用箭頭鍵循環顯示結果:

例子

這是一個示範截圖

它可以安裝在 Debian 系列作業系統上,例如:

add-apt-repository ppa:ultradvorka/ppa
apt-get update
apt-get install hstr

hstr --show-configuration >> ~/.bashrc

然後使用Ctrl + R(重新打開終端機後)。

相關內容