例えば '■' をカーソルとして
$ grep tset /var/log/php.log■
って入力したとするじゃないですか。ここで、grep の第一引数がたいぽってることに気づきます。それを直したくて十字キーの左ボタンおしっぱにしてカーソルを移動させるのもいいですが、一発でtset
のところまで行きたいじゃないですか。そういう時はおもむろにControl+r
を押してから、e
を押します。すると
$ grep ts■et /var/log/php.log
カーソルがこの位置に移動します。Emacsライクに。ここでTab
を押すと検索が終了してカーソルがこの位置で普通の入力モードに戻ります。
便利ですね!これで本エントリのメインディッシュは終わりです。
その他よく使う検索を終了する入力としてControl+b
(カーソルを左に移動), Control+f
(カーソルを右に移動), Control+d
(カーソル右の文字(今回の場合e
)を削除)などがあります。
注意点としては、EmacsだとEnter
を押すと検索が終了するんですが、シェルでEnter
を押すとそのコマンドを実行してしまいます。また、Control+h
は検索するために入力した文字列の削除になります。
また、検索を終了させずにもう一度Control+r
を押すと、もう一度e
を検索します。
$ gr■ep tset /var/log/php.log
検索して戻りすぎた場合、tset
のところに戻りたい場合はControl+s
を押します(zsh限定?少なくともbashじゃ無理) (追記:bashでも設定すれば出来ました。コメント参照。thanks to paselaさん)
1回押すと
$ gre■p tset /var/log/php.log
こうなって、もう一度押すと
$ grep tse■t /var/log/php.log
こうなります。
Control+r
やControl+s
は普通過去のコマンドを検索することに使われますが、「過去のコマンド」に今入力した記述も含まれる、という感じでしょうか。
ちなみに余談ですがbashでControl+s
を押すと端末をロックして動かなくなるので注意です。Control+q
でロック解除になります。シェル使い始めた頃は、シェルがバグったと勘違いして毎回強制終了してました。。。