web-dev-qa-db-ja.com

シェルプロンプトで上を押すと、同じプレフィックスを持つ前のコマンドを検索します

FreeBSDの世界から来た私は、LinuxターミナルをFreeBSDのバージョン、特に9.1バージョンのように動作させたいのですが、基本的にターミナルでcdと入力して「上」矢印を押すと、履歴はcdで始まり、多くの時間を稼ぐことができます。

Linux DebianまたはCentOSでこの機能を有効にする方法がわからないので、全体を入力する必要があります。誰か助けてください。

19

以下を~/.inputrcに追加します。

# Press up-arrow for previous matching command
"\e[A":history-search-backward
# Press down-arrow for next matching command
"\e[B":history-search-forward

説明

~/.inputrcGNU readline の構成ファイルです。 bashおよびtcshを含む多くのシェルは、コマンドラインの編集にreadlineを使用します。上記の2行は、上矢印キー(\e[A)および下矢印キー(\e[B)のエスケープシーケンスが検出されたときに、履歴検索機能を呼び出すようにreadlineに指示します。

34
Thomas Nyman

何が起こっているのかというと、FreeBSDとLinuxはデフォルトで異なるシェルを使用しています。 FreeBSDのデフォルトは tcsh ですが、これは過去のbashよりもインタラクティブな機能が優れていました(しかし、bashは追いついてきました) 著しく悪いスクリプト機能

Linuxでシェルをtcshに切り替えるのが慣れている環境を取得する最も簡単な方法です。 tcshがシステム全体にインストールされている場合(インストールされていない場合は、システム管理者にインストールを依頼してください)、chsh -s tcshを実行してデフォルトのシェルを変更します。

または、このコマンドを使い慣れるようにbashを設定することもできます。デフォルトでは、 Up そして Down 矢印は、入力した接頭辞で始まるコマンドだけでなく、履歴内のすべてのコマンド間を移動します。これを慣れ親しんだ動作に変更するには、bashの初期化ファイル(ホームディレクトリの.bashrc)に次の行を追加します。 . ~/.bashrcを実行するか、新しいシェルを起動して初期化ファイルを再度読み取ります。

bind '"\eOA": history-search-backward'
bind '"\e[A": history-search-backward'
bind '"\eOB": history-search-forward'
bind '"\e[B": history-search-forward'

エスケープシーケンスは、矢印キーを押したときにターミナルがシェルに送信するものです。 Up 端末によっては、\eOA(エスケープ、OA)または\e[Aの場合があります。 Down

デフォルトでは、bashはコマンド履歴を検索するためのさまざまなキーバインディングを提供します。押すことができます Ctrl+R次に、いくつかの文字を入力して、行のどこかにこの部分文字列を含むコマンドを検索します。押す Ctrl+S 後退ではなく前進します。検索はインクリメンタルです(つまり、as-you-type)。 Alt+P そして Alt+N 非増分検索を提供します。

Bashとtcshの代わりに、zshに切り替えることができます (他のシェルには見られないいくつかのきちんとした機能があります 。 Zshは Ctrl+R そして Ctrl+S デフォルトではbashと同じです。取得するため Up そして Down tcshと同じように、次の行を~/.zshrcに入れます。

bindkey '\eOA' history-beginning-search-backward
bindkey '\e[A' history-beginning-search-backward
bindkey '\eOB' history-beginning-search-forward
bindkey '\e[B' history-beginning-search-forward

どこでも同じシェルを使用したい場合は、ポートがインストールされていれば、FreeBSDでもbashまたはzshを使用できます(ここでもシステム管理者にお問い合わせください)。

tcshは、ほとんどのLinuxディストリビューションで使用できます。 tcshパッケージをインストールしてから、chsh -s /bin/tcshをデフォルトのシェルにします。

1
cjm

他の答えはそれに取り組みますが、もっと知りたい場合は、 https://github.com/zsh-users/zsh-history-substring-search を見てください。

Prezto( https://github.com/sorin-ionescu/prezto )もzshの魅力に満ちています。

1
Fuad Saud