Bashには、最後のコマンドの一部を繰り返す便利な演算子がいくつかあります。
!^
前のコマンドの最初の引数に展開します。たとえば、$ echo one "two three" one two three $ echo !^ echo one one
!$
前のコマンドの最後の引数に展開します。たとえば、$ echo one "two three" one two three $ echo !$ echo "two three" two three
!*
前のコマンドのすべての引数に展開します。たとえば、$ echo one "two three" one two three $ echo !* echo one "two three" one two three
(私が理解している限り、これらはそれぞれ!!:^
、!!:$
およびの構文シュガーであり、は前のコマンドに拡張されるイベント指定子、およびは単語指定子です。Bashリファレンスマニュアルまたはを参照してください。)!!:*
!!
^
$
*
man bash
これらはしばしば非常に便利です。しかし、キーボードショートカットを使用するとさらにクールになります。
あなたがヒットするとAlt+ .またはAlt+を_、前のコマンドの最後の引数は、あなたが書かれていたかのように同様に、現在のコマンドに挿入された
!$
その時点で。Alt+ + Ctrl+ yを押して
!^
、その時点で書き込んだかのように、前のコマンドの最初の引数を挿入することもできます。
(GNU Readline Libraryまたはを参照してくださいinfo readline
。)
コマンドを実際に実行する前に挿入する内容を確認できるため、Bashの履歴演算子よりもキーボードショートカットを好む傾向があります。ただし、前のコマンドのすべての単語を挿入できるショートカットがないようです。つまり、!*
の仕事です。少なくとも私はそれを見つけることができませんでした。
そのようなショートカットはありますか?そうでない場合、それを追加するようにreadlineライブラリを構成することは可能ですか?
zsh
、タイプecho !*
してからTabキーを押すと、目的の効果が得られます。一般に、TABはreadlineにある間、すべてのエキスパンドを展開します。とても便利な; おそらくbashは同じ効果を持ついくつかの設定を持っていますか?@Seth、これはターミナルエミュレーターではなく、bashへのreadlineだと思います。
man bash
(ライン3030でどこか)
\e.
そして、\e_
readlineの関数にマップされているyank-last-arg
と\e\C-y
にマッピングされていますyank-nth-arg
。残念なことに、以前の引数を一度に複数追加する(単一の)コマンドはないようです。