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


19

FreeBSDの世界から来て、私は基本的にあなたが入力すると、FreeBSDの1、特に9.1バージョンのようなLinuxのターミナル振る舞いをしたいcdの端末で、矢印「アップ」を押して、あなたと歴史始めにすべてのコマンドを閲覧することができcdますせています多くの時間を稼ぎます。

Linux DebianやCentOSでこの機能を有効にして、全体を入力するように強制する方法がわかりません。誰か助けてください。


7
これは、端末ではなくシェルの機能です。FreeBSDではどのシェルを使用していますか?Linuxで同じ(または同様の)シェルを入手できる場合があります。
cjm

tcshシェルを使用しています。
アブデリラベナウ13年

2
私はOS Xの下でtcshを使用していますし、この便利に見える行動を持っていなかった...いくつか検索した後、私は置くことによって、それを有効にすることができたbindkey -k (up|down) history-search-(back|for)ward私に.tcshrc 、ここで説明したように。クール!
ギャレットオルブライト

回答:


34

以下に追加します~/.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)および下矢印キー()のエスケープシーケンスが検出されたときに、履歴検索機能を呼び出すようにreadlineに指示\e[Bします。


F12追加して、最後の行の最後の単語を現在のコマンドの最後に追加します。Last word多くの場合、さまざまな難解な決まり文句で試してみたいパスです。そして、シフトF12は最初から全体の最後の行を製作中に私を戻します。~/.inputrc便利なツールです。
ジャランブ

シフトF12 一つが必要とviのモード
ジャランブ

6

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

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

または、bashをセットアップして、このコマンドを使い慣れたものにすることができます。デフォルトではUpDown矢印と矢印は、入力したプレフィックスで始まるコマンドだけでなく、履歴内のすべてのコマンド間を移動します。これを以前の動作に変更するには.bashrc、ホームディレクトリにあるbashの初期化ファイルに次の行を追加します。. ~/.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を押します。検索はインクリメンタル(つまり、入力どおり)です。Alt+ PおよびAlt+ Nは、非増分検索を提供します。

bashとtcshの代わりに、zshに切り替えることができます。zshには、他のシェルにはない優れた機能がいくつかあります。Zshには、デフォルトでbashと同じようにCtrl+ RCtrl+ Sがあります。取得するUpDown、あなたが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を使用できます(もう一度、システム管理者に問い合わせてください)。


1

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


1
または、bashへの切り替えを検討することもできます(私はしました)。
キーストンプソン

1

他の回答がそれに取り組んでいますが、さらに必要な場合はhttps://github.com/zsh-users/zsh-history-substring-searchをご覧ください

Prezto(https://github.com/sorin-ionescu/prezto)もzshの便利な機能が満載です。


答えてくれてありがとう、まだbshやtcshよりもzshの利点がわからないのですが?
アブデリラベナウ

1
ええと、これらすべてのシェルでほとんどすべての基本的なことを行うことができます。zshを使用する理由は、かなりよく管理されたpreztoバンドル(おそらく大きなゲームチェンジャー)、正しいプロンプト(排他的な機能)、およびbash(設定とか)よりも洗練されていると感じるためです。
フアッドサウド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.