前後に移動せずに完全なbash履歴を検索するにはどうすればよいですか?

前後に移動せずに完全なbash履歴を検索するにはどうすればよいですか?

場合によってはCtrlR、コマンド履歴を検索するときにその項目が履歴にあることがわかっているにもかかわらず、目的の項目が見つからないことがあります。私はすでにその項目を通過しているので、別の方向に移動するには別のコマンドを使用する必要があると思います。最後に到達するとループ(ループを再開)して履歴全体を検索するコマンドがありますか?

ベストアンサー1

Alt+を使用して>履歴の終わりに戻って再検索することができますが、おそらくあなたはそれを知っていて、それはあなたが望むものではないかもしれません。

残念ながら、私はそれを包む方法がないと思います。

man bashまたはでこれについて何も見ることができませんman readline

マクロを作成しようとすることができますが、readline現在どの歴史的線にあるかを示す変数はありません。

それに加えて、実行可能な選択肢を見つけることができるいくつかの提案は次のとおりです。


Ctrl端末が+を送信するように設定されている場合S(たとえば、runを介してstty stop undef)、Ctrl単に+を押して方向を変更できますS


history | grep <whatever>その後、入力!<number from left column>して実行できます。

入力が長すぎる場合は、入力を保存する機能をいくつか作成してください。

hgrep() {
    history | grep "$@"
}

設定history-search-backwardhistory-search-forward

たとえば、ls Alt+ PAlt+ PAlt+はすべてのコマンドをP 後ろに検索します。ls

また、別のショートカットを押して方向を変更することもできます。たとえば、最も古いコマンドを使用している場合は、Alt+キーを+Pキーに切り替えることができます。AltN

/etc/inputrcこれをあなたのまたは.inputrcforに入れるbash

$if mode=emacs
"\ep": history-search-backward
"\en": history-search-forward
$endif

これは.zshrcあなたのものですzsh

bindkey -M emacs '^[p' history-beginning-search-backward
bindkey -M emacs '^[n' history-beginning-search-forward

さらに一歩進んで、上向き矢印を使用してこれを行うこともできます。


最後に、コマンドは履歴に記録されていますか?HISTCONTROLあるいは、設定によってHISTIGNORE無視されるものであっても、HISTSIZE設定によって無視されるものであっても、?によって無視されるものであってもよい。

おすすめ記事