web-dev-qa-db-ja.com

入力したばかりの接頭辞を持つ前のコマンドを検索します

上矢印と下矢印を使用して、コマンド履歴内を移動できます。

Matlabなどの一部のIDEでは、何かを入力してから矢印キーを押すと、入力した内容で始まる履歴コマンドのみをスクロールします。これは本当に便利ですが、Shellターミナルでは機能しません。

シェルターミナルで同様の機能を取得する方法はありますか?端末の使用効率を向上させるためのその他のヒントはありますか?

74
Lee

あなたが探しているのは CtrlR

タイプ CtrlR 次に、必要なコマンドの一部を入力します。 Bashは最初に一致したコマンドを表示します。入力を続けます CtrlR bashは、以前に一致したコマンドを循環します。

履歴を逆方向に検索するには、次のように入力します。 CtrlS 代わりに。 (もし CtrlS がそのように機能しない場合、XON/XOFFフロー制御を無効にする必要があることを意味します。そのためには、stty -ixonを実行します。)

これは、man bashの「検索」の下に記載されています。

109
John1024

これらを~/.inputrc

"\e[5~": history-search-backward
"\e[6~": history-search-forward

これらは Page Up そして Page Down あなたが望むように動作します。 (一部のディストリビューションではすでに構成されています。)私はこれらの方法が Ctrl+R またはhistory

33
egmont

^ r/^ s履歴i-searchに加えて:

alt. 前のコマンドの最後の「ワード」をカーソル位置に挿入します。それを繰り返して、古いコマンドから最後のワードを取得します。 (ただし、末尾の_&_はバックグラウンドコマンドの最後のWordとしてカウントされることに注意してください)。

これは、_mkdir foo_、cd alt-dotに非常に便利です。上矢印、^ a、alt-d(前方ワードの削除)、cdよりも高速です。

最後から2番目のWordを取得するには、esc _-_ _2_ _alt+._を使用します(つまり、_alt+._にemacsスタイルの数値引数を使用します。負の数最後から正の数が最初からカウントされます。)しかし、これは通常、その価値よりも問題が多くなります。ある時点で、マウスに到達してコピー/貼り付けするか、上向き矢印とその一部を^ w/^ yする方が速くなります(以下を参照)。


端末が適切に/適切に設定されている場合、ctrl-leftとctrl-rightは単語単位で前後に移動します。そうでなければ、うまくいけば、少なくともalt-bとalt-fが同じことをするでしょう。


ctrl- /は取り消しです。少しオーバーシュートしたときに元に戻すことができれば、オートリピートを使用して単語をより効率的に削除できます。


コマンドのより強力なミキシング/マッチングは、Emacsと同じように機能するkill-ringを使用することから得られます。最後のctrl-w/ctrl-u/ctrl-backspace/alt-dを貼り付けるにはctrl-y。古いキルされたテキストを循環するalt-y。

複数のctrl-wまたは続けて何でもkill-ringエントリを作成します。 2つを削除し、後で1つだけ貼り付ける場合は、左矢印または右矢印などを使用してエントリを分割します。

これらすべてを組み合わせると、

  • コマンドを入力し始める
  • ctrl-rで古いコマンドに戻り、control-wなどでその一部を取得します。
  • esc-rまたは_alt+r_を使用して、一部を削除する前の状態に戻します。
  • alt -_>_を押すと、履歴の最後(つまり、下向き矢印)に移動して、途中のコマンドに戻ります。

その他のインタラクティブな使い方のヒント:

_shopt -s globstar_を有効にすると、_**/*.c_(現在のディレクトリを含む再帰的)を実行できるようになります。インタラクティブな使用には便利な場合がありますが、通常は_find -name '*.c' -exec foo {} +_の方が適しています。

Bashスクリプトを作成する場合、_shopt -s extglob_をインタラクティブシェルでも有効にすると便利です。あなたは時々*.!(c|h)のようなものの使用を見つけて、.cまたは.hで終わらないファイルに一致させます。

_ls -l_、lessなど、よく行うエイリアスを見つけます。 (_cp -i_、_mv -i_、および_rm -I_は素晴らしいです。dependingの習慣に慣れないでくださいGNU rm's -Iはすべての引数を1回要求します。)

私は_alias m=less_が好きです(mは "more")。 lessを設定しました , そして . 前/次のファイル(lesskey)にバインドされています。デフォルトは、オートリピートで使用できない複数のキーを押すシーケンスです。


私はGNU screen内ですべてを実行するのが好きです。Konsole(または私が試した他の端末エミュレータ)でタブのボートロードよりも番号付きのスクリーンウィンドウを追跡する方が簡単だと思います。 screenをまだ知らない場合は、tmuxを学習してください。これは、tmuxの方が新しく、扱いにくいためです。

別のシェルと同じcwdで新しいシェルを開く機能のようなものを得るために、私は cd/pushd/popdのカスタムフックを使用して_cds 8_を実行し、シェルの任意のディレクトリにcdします画面ウィンドウ8が使用中です。 これは、画面セッションが1つしかない限り、画面セッション外のシェルでも機能します。

10
Peter Cordes

次の行を~/.inputrcに追加します

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

これはエグモントの答えに似ていますが、Page UpとPage Downを使用する代わりに、上向き矢印と下向き矢印のエスケープシーケンスを使用します。この方法は、Macで使用する方がはるかに便利です。

7
John Slavick

私は常にマシンに大きな[〜#〜] histsize [〜#〜]値を設定して、より長い履歴リストと[〜#〜] histt​​imeformatを保持する傾向がある[〜#〜]タイムスタンプ値を使用して、コマンドがいつ実行されたかを確認できます。

export HISTSIZE=10000
export HISTTIMEFORMAT="%m/%d/%Y %T "
5
Alpha01

私が通常使用する方法は、historyコマンドをgrepと組み合わせることです

IE:

history | grep <command im looking for>

これにより、そのコマンドを含む、入力したコマンドの番号付き履歴が表示されます。その後、次のコマンドを使用できます。

!<number listed in history command>

そのコマンドをやり直す。

IE:

history | grep history

142  history
143  history | grep lvresize
568  history | grep echo
570  history | grep echo
571  history | grep history

に続く: !571

繰り返しますhistory | grep history

3
Gravy

zshの代わりにbashを使用しても問題ない場合は、oh-mi-zshを使用できます。

上矢印と下矢印でコマンド履歴をナビゲートできます。 (Mathlabのように)すでにテキストを入力しているときも同じナビゲーションが可能です。

edit:Oh-my-zshは、開発者向けの大規模なソフトウェアパッケージで、他の多くの機能が含まれています。エイリアス、テーマ、プラグイン。これらの追加機能により、キーボードショートカットよりもディストリビューションの使用が複雑になります。

https://github.com/robbyrussell/oh-my-zsh

2
user9869932

私はbashターミナルで毎日4つのヒント(および他のいくつか)を使用しました:

  • 最後のコマンドを実行:!!

  • コマンドを実行[〜#〜] n [〜#〜]履歴から:!N

  • 次で始まる最後のコマンドを出力prefixfrom history:!prefix:p

  • 次で始まる最後のコマンドを実行prefixfrom history:!prefix

2
Nolwennig

次のエイリアスを〜/ .bashrcに追加します

alias h='history | awk '"'"'{$1="";print}'"'"' |sed "s/^ *//" |grep -v "^h " | sort | uniq | grep'

使用法: h firefireを含むコマンドのリストを取得します。またはh ^firefireで始まるコマンドのリストを取得します。

これは、一連のコマンドを同時に表示したい場合に便利です。

ところで、 '"'"'は醜いですが、一重引用符で一重引用符を回避する他の方法を見つけることができませんでした。

1
Hosi Golden