!:0 のエイリアスを作成することは可能ですか?それとも他のオプションはありますか?

!:0 のエイリアスを作成することは可能ですか?それとも他のオプションはありますか?

正直に言うと、このショートカットは!:0Shiftキーも必要であることを考慮すると十分に短いとは思わない。

エイリアスや関数を作成することが可能かどうか疑問に思います。何か落ちたことを知っています。私は明らかなことをしました:

pr() {
    !:0
}

そして:

alias pr="!:0"

それともAlt + .似ていますが、コマンド部分($ 0)に固有のものですか?私は何も見つかりませんでした。

答え1

以下を使用してこれを実行できますfc

alias pr='fc -e "sed -i s/\ .*//"'

これを行うには、fc最後のコマンドを入力してエディタを起動し、エディタが終了するのを待ってから(修正可能な)コマンドを実行する必要があります。通常のエディタを使用する代わりに、エイリアスはコマンドのsed最初の単語だけを保持します。

答え2

!:0まず、これは履歴の最後の行にあるコマンドではないことに注意してください。これが最初の単語です。A=B some-command arg1したがって、実行すると!:0そうなりますA=B

これで言及したので、Alt.次のようになります。

yank-last-arg (M-. or M-_)

前のコマンド(前の履歴項目の最後の単語)に最後の引数を挿入します。数値引数の場合の動作は 。yank-nth-arg[...]とまったく同じです。

前述したyank-nth-arg:

前のコマンドポイントに最初の引数を挿入します(通常は前の行の2番目の単語)。議論があるN入れる N前のコマンドの最初の単語(前のコマンドの単語は単語0で始まります)

したがって、これを行うことができます。またはAlt0 AltCtrlyパラメータを使用してyank-last-arg「正確に」動作するので。yank-nth-argAlt0 Alt.

これを行うにはバインディングを実行できますが、これは少しバイパスです。確かにreadlineには、引数が指定されたときにコマンドにバインドするメカニズムはありません。あなたはする必要がありますキーシーケンスにバインドまず、パラメータの順序を模倣してから既存のバインディングの順序を模倣するので、次のようにできます。

bind '"\e,": "\e0\e."'

次に、をAlt,押して最初の単語を取得します。

関連情報