上矢印と下矢印を使用して、コマンド履歴内を移動できます。
Matlabなどの一部のIDEでは、何かを入力してから矢印キーを押すと、入力したものから始まる履歴コマンドのみをスクロールします。これは本当に便利ですが、シェル端末ではこれは機能しません。
シェル端末で同様の機能を得る方法はありますか?そして、端末の使用効率を改善するための他のヒントはありますか?
上矢印と下矢印を使用して、コマンド履歴内を移動できます。
Matlabなどの一部のIDEでは、何かを入力してから矢印キーを押すと、入力したものから始まる履歴コマンドのみをスクロールします。これは本当に便利ですが、シェル端末ではこれは機能しません。
シェル端末で同様の機能を得る方法はありますか?そして、端末の使用効率を改善するための他のヒントはありますか?
回答:
あなたが探していることですCtrlR。
入力してCtrlR、必要なコマンドの一部を入力します。Bashは最初に一致したコマンドを表示します。入力CtrlRを続けると、bashは前の一致するコマンドを繰り返します。
履歴を後方に検索するには、CtrlS代わりに入力します。(それCtrlSがうまくいかない場合は、おそらくXON / XOFFフロー制御を無効にする必要があることを意味しますstty -ixon
。それを実行するには、を実行します。)
これはの「検索」に記載されていman bash
ます。
Ctrl-Q
Ctrl-S
最初にフロー制御をオフにせずにヒットし、ターミナルをフリーズした場合、フリーズ状態を終了します。
これらを以下に配置します~/.inputrc
。
"\e[5~": history-search-backward
"\e[6~": history-search-forward
これらはPage Up、Page Down希望通りに動作します。(一部のディストリビューションでは、すでに構成されています。)個人的には、これらの方法はCtrl+ Rまたはhistory
。
~/.inputrc
または/etc/inputrc
、環境変数によって参照されるファイル$INPUTRC
は、bash(シェル)を含むreadlineを使用するすべてのアプリケーションの行編集構成ファイルです。この2つを含む、特定の組み込みの行編集機能があります。bashのマニュアルページで、これらのキーワードの1つを検索して詳細を調べます。\e[5~
/ \e[6~
は、ほとんどのターミナルエミュレータでPage Up / Downキーによって生成されるエスケープシーケンスです。確認するには、cat
コマンドを起動してからこれらのキーを押します(エスケープバイトは、ターミナル^[
ではinputrcでとして表されます\e
)。
echo $INPUTRC
するとき、それは空です。Ubuntu 14.04を使用しています
"\e[A": history-search-backward
と"\e[B": history-search-forward
^ r / ^ s履歴i-searchに加えて:
alt.前のコマンドの最後の「単語」をカーソルに挿入します。それを繰り返して、古いコマンドから最後の単語を取得します。(ただし、末尾&
はバックグラウンドコマンドの最後の単語としてカウントされることに注意してください)。
これはmkdir foo
、 cd
alt-dotに非常に便利です。、上矢印、^、ALT-D(前方単語を削除)よりもさらに速いですcd
。
最後から2番目の単語を取得するには、esc
-
2
alt+.
(つまり、末尾にemacsスタイルの数値引数を使用しalt+.
ます。末尾から負のカウント、先頭から正のカウントを使用します)。ある時点で、マウスに手を伸ばしてコピー/貼り付けするか、上向き矢印と^ w / ^ y部分に到達するのが速くなります(以下を参照)。
端末が適切に/適切に設定されている場合、ctrl-leftとctrl-rightは単語単位で前後に移動します。そうでない場合は、少なくともalt-bとalt-fが同じことを行うことを願っています。
ctrl- /は取り消しです。少しオーバーシュートしたときに元に戻すことができれば、自動リピートを使用して単語をより効率的に削除できます。
コマンドのより強力なミキシング/マッチングは、キルリングを使用することによりもたらされます。キルリングは、Emacsと同じように機能します。ctrl-yで最後のctrl-w / ctrl-u / ctrl-backspace / alt-dを貼り付けます。alt-yは、古いキルされたテキストを循環します。
複数のctrl-wまたは連続してキルリングエントリを作成します。2つのものを削除し、後で1つだけを貼り付ける場合は、左右の矢印または何かを使用してエントリを分割します。
これらをすべて組み合わせて、次のことができます。
alt+r
一部を削除する前の状態に復元します。>
(つまり、下向きの矢印)に移動して、途中にいたコマンドに戻ります。その他のインタラクティブな使用のヒント:
を有効shopt -s globstar
にすると、できるようになります**/*.c
(現在のディレクトリを含む再帰的)。インタラクティブな使用に便利な場合もありますが、通常find -name '*.c' -exec foo {} +
はより優れています。
bashスクリプトを作成する場合shopt -s extglob
、インタラクティブシェルでも有効にすると便利です。.cまたは.hで終わらないファイルに一致するようなものを使用する場合があります*.!(c|h)
。
あなたが好きな別名を検索ls -l
、less
、elseと何もあなたは多くを行います。(cp -i
、mv -i
、とrm -I
の習慣に取得しないでください。いいです応じて選択RMを行うには、それらに。GNUのRMの-Iは、すべての引数のために一度要求します。)
私は好きですalias m=less
(mは "more")。私がしているless
と設定,し、.次/前のファイルに結合しています(lesskey
)。デフォルトは、オートリピートでは使用できない複数キー押下シーケンスです。
私はGNU画面内ですべてをするのが好きです。Konsole(または私が試した他のターミナルエミュレーター)のタブのボートの数よりも、番号の付いたスクリーンウィンドウを追跡する方が簡単だと思います。まだ知らない場合はscreen
、tmuxのほうが新しくてあまり手ごわくないので学びましょう。
別のシェルと同じcwdで新しいシェルを開く機能のようなものを取得するには、cd / pushd / popdのカスタムフックcds 8
を使用します。これにより、画面ウィンドウ8のシェルが使用しているディレクトリにcd できます。 これは、スクリーンセッションが1つしかない限り、スクリーンセッション以外のシェルでも機能します。
gnome-terminal
KDEに切り替える前は、Ubuntu 14.04ですぐに使用できたと思います。関連するオプションは、ターミナル設定、esc-prefix vs high-bit、およびその他の設定にあります。そのうちのいくつかは、sshを使用しても完全に機能しません。(たとえば、Ctrlキーを押しながら左/右矢印キーのエスケープコードを変更すると、5D
文字通り表示されます)
次の行を追加します ~/.inputrc
"\e[A": history-search-backward
"\e[B": history-search-forward
これはegmontの答えに似ていますが、Page UpとPage Downを使用する代わりに、Arrow UpとArrow Downのエスケープシーケンスを使用します。この方法は、Macで使用する方がはるかに便利です。
私が通常使用する手段は、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
!
履歴置換の安全性が低いと考えています。
conaのzsh
代わりに使用しても問題ない場合は、oh-my-zshを使用します。bash
コマンド履歴内の上下矢印ナビゲーションが含まれています。また、(Mathlabとして)テキストを既に入力している場合も同じナビゲーションが可能です。
編集:エイリアスやテーマなど、開発者向けのその他のものも含まれています。そのため、ディストリビューションはより大きく、より複雑になります。
oh-my-zsh
たくさんのものが含まれています。特定の設定またはアプリのみが必要な場合、この正確な機能はそのディストリビューションに含まれています。
〜/ .bashrcに次のエイリアスを追加します
alias h='history | awk '"'"'{$1="";print}'"'"' |sed "s/^ *//" |grep -v "^h " | sort | uniq | grep'
使用法:fireをh fire
含むコマンドのリストを取得します。または、fireで始まるコマンドのリストを取得します。h ^fire
これは、一連のコマンドを同時に表示したいときに便利です。
ところで'"'"'
、,いですが、一重引用符で一重引用符を避ける他の方法を見つけることができませんでした。
h="history | awk '{\$1=\"\"; print}'
はずです。または、関数を作成して呼び出します。
fish
;)のような機能を提供するシェルを単に使用できます