回答:
同じようにM-.
(メタドットまたはESC-ドットまたはALT-ドット)readlineの関数でありyank-last-arg
、M-C-y
(メタ制御-YまたはESC-CTRL-YまたはCTRL-ALT-Y)readlineの関数ですyank-nth-arg
。を指定しない場合n
、前のコマンドの最初の引数をヤンクします。
引数を指定するには、Escキーと数字を押すか、Altキーを押しながら数字を押します。あなたがすることができますAlt- -負の数の指定を開始するには、Altを放して数字を押します(これは引数のリストの最後から数えます)。
例:
次のコマンドを入力します
$ echo a b c d e f g
a b c d e f g
次のプロンプトで、echo
(次のスペースで)入力し、
プレスAlt- Ctrl- yあなたは今、表示されます:
$ echo a
Enterまだ押さずに、次の操作を行います
プレスAlt- 3 Alt- Ctrl-y
プレスAlt- - 2 Alt- Ctrl-y
今あなたは見るでしょう:
$ echo ace
ちなみに、echo
引数0を選択してを行に追加することもできます。
プレスAlt- 0 Alt- Ctrl-y
編集:
オリジナルに追加した質問に答えるには:
あなたは押すことができますAlt- 0を繰り返し押しAlt- .ステップへの前のコマンド(引数0)を介して。同様にAlt- -その後、繰り返しAlt- .あなたは前の最後から引数をステップ実行することができるようになります。
履歴の特定の行に適切な引数がない場合、ベルが鳴ります。
頻繁に使用する特定の組み合わせがある場合は、マクロを定義して、1回のキーストロークでそれを実行できます。この例では、押して、前のコマンドから二番目の引数を思い出しますAlt- - 。Shift Yこのキーストロークの代わりに、使用可能なキーストロークを選択できます。繰り返し押すと前のステップに戻ります。
試してみるには、Bashプロンプトでマクロを入力します。
bind '"\eY": "\e2\e."'
永続化するには、次の行を~/.inputrc
ファイルに追加します。
"\eY": "\e2\e."
残念ながら、これはarg 0または負の引数番号に対しては機能しないようです。
-s
(Bash 4の新機能)はを使用して作成されたマクロをリストします-x
。
M-.
。Alt-3
Alt-Ctrl-y
の例では、保持等しいためAlt
とタイピング3.
。3.
リリースせずに複数回入力する場合Alt
は、前のコマンドラインの3番目の引数を使用します。
!$
前のコマンドライン引数の最後の要素を取得します。
!:3
3番目のものを取得します
!!
最後のコマンド全体を取得します。使用するのを忘れた場合に役立ちますsudo
。
!:1-2
最後の3つの引数を除くすべてを取得
echo foo{,bar} baz
、コマンドは印刷されたものとして記録され、後で展開されます。上記では、echo !:1
afterを次のように解決しecho foo{,bar}
てから展開しますecho foo foobar
最初の引数を使用するには、!^
または!:1
例:
$ echo a b c d e
a b c d e
$ echo !^
echo a
a
$ echo a b c d e
a b c d e
$ echo !:1
echo a
a
あなたの質問は他の引数の使用に関するものなので、ここにいくつかの便利な引数があります:
!^ first argument
!$ last argument
!* all arguments
!:2 second argument
!:2-3 second to third arguments
!:2-$ second to last arguments
!:2* second to last arguments
!:2- second to next to last arguments
!:0 the command
!! repeat the previous line
最初の4つの形式がより頻繁に使用されます。このフォーム!:2-
は、最後の引数が含まれていないため、多少直観に反しています。
file3
から得るmv file1 file2 file3 target/
?
@larsmansの回答が好きだったので、もっと学ぶ必要がありました。この回答を追加して、他の人がmanページのセクションを見つけ、グーグルの目的を理解できるようにします。
$ man -P 'less -p ^HISTORY\ EXPANSION' bash
<...>
Word Designators
Word designators are used to select desired words from the event.
A : separates the event specification from the word designator.
It may be omitted if the word designator begins with a ^, $, *, -,
or %. Words are numbered from the beginning of the line, with the
first word being denoted by 0 (zero). Words are inserted into the
current line separated by single spaces.
0 (zero)
The zeroth word. For the shell, this is the command word.
n The nth word.
^ The first argument. That is, word 1.
$ The last argument.
% The word matched by the most recent ‘?string?’ search.
x-y A range of words; ‘-y’ abbreviates ‘0-y’.
* All of the words but the zeroth.
This is a synonym for ‘1-$’.
It is not an error to use * if there is just one word in
the event; the empty string is returned in that case.
x* Abbreviates x-$.
x- Abbreviates x-$ like x*, but omits the last word.
If a word designator is supplied without an event
specification, the previous command is used as the event.
!^は最初の引数のコマンドです。n番目を取得する方法があるかどうかはわかりません。
!:n
ますが、最初ではなく最後から数えますか?
履歴内の任意のコマンドから引数を取得することもできます!
$ echo a b c d e f g
a b c d e f g
$ echo build/libs/jenkins-utils-all-0.1.jar
build/libs/jenkins-utils-all-0.1.jar
$ history | tail -5
601 echo build/libs/jenkins-utils-all-0.1.jar
602 history | tail -10
603 echo a b c d e f g
604 echo build/libs/jenkins-utils-all-0.1.jar
605 history | tail -5
$ echo !-3:4
echo d
d
$ echo !604:1
echo build/libs/jenkins-utils-all-0.1.jar
build/libs/jenkins-utils-all-0.1.jar
Linuxでは、コマンドを繰り返して履歴に戻ることができます
最後のコマンドは:
mv foo bar
mv
foo
mv foo
これを実行または追加します ~/.zshrc
autoload -Uz copy-earlier-word
zle -N copy-earlier-word
bindkey "^[:" copy-earlier-word
Alt+ .を使用して必要なだけ前に戻り、次にAlt+ :を使用して引数を反復処理します
最後のコマンドが
echo 1 2 3 4 5
5
4
3
2
1
echo
ソース:https : //stackoverflow.com/a/34861762/3163120
bind -lp
bindkey -L
私はこの要点でこれを最新に保っていますhttps://gist.github.com/madacol/da38e42d7e45c2949a9f425cc20543e9
Alt .
Zshの上でMac上で入力され≥
🤔
bindkey -L
、バインドされているすべてのショートカットを確認できます。おそらく、問題を特定するのに役立つだけでなく、他の有用なコマンドを見つけることもできます。たとえば、私の場合:バインディングAlt .
はとして定義されていbindkey "^[." insert-last-word
ます。 Ctrl L
(画面をクリアするには)-> bindkey "^L" clear-screen
。 Alt+Ctrl h
-> bindkey "^[^H" backward-kill-word
(Ctrl w
最後の単語を削除するのと同じ)
bindkey "^[^_" copy-prev-word
基本的に、以前の(コマンドの)引数をヤンクするのに使用します。
たとえば、次のコマンドが発行されたとします。
echo Hello, world how are you today?
次に、Hello,
最初の引数になりtoday?
、6番目の引数は最後の引数になります。次のように入力して参照できることを意味します。
Alt+6 に続く Ctrl-Alt-6
Ctrl伝統的な帽子の文字と表記された^
キー名の前に付け、およびAltとしてM-
それであるMの ETAの接頭辞。
したがって、上記のショートカットは^My
ヤンクに関して再定義できます。
また、コマンドラインには帽子置換ショートカットがあります:
echo Hello, world!
^Hello^Bye
Bye, world!
前のコマンドで最初に一致した文字列を置き換えるには、次のようにします。
Hello, world! Hello, people!
^Hello^Bye
結果は:
Bye, world! Hello, people!
2番目の一致(hello
)は変更しません。
注:帽子の間にスペースを残さないでください。操作が機能しなくなります。
上記は、以下のショートカットです。
!:s/Hello/Bye
前のコマンドで最初に見つかった(一致した)文字列のイベントレベル(*)置換、を有する第1の部分を前置しながらg
スイッチに適用される全ライン G lobally。
echo Hello, world! Hello, people!
!:gs/Hello/Bye
Bye, world! Bye, people!
通常、他の関連するコマンドで行われているsed
、vi
とでregex
検索するスタンダール道( - (正規表現)一致文字列)。
いいえ、できません、
!:sg/Hello/Bye
または!:s/Hello/Bye/g
ここでは、それが構文です!
それを自分で使用し、マニュアルページ、ブログ、フォーラムなどのさまざまなソースから読んだものを自分で試して理解したのです。
神秘的な方法でbash
あるBourne-Againシェル(sh
発明者の姓からBourneシェルと呼ばれるプレイオンシェル)、サーバーを含む多くのディストリビューション(サーバーOS)のデフォルトシェルであるシェルにいくつかの光が当てられることを願っています。
!^は最初のパラメータを取得し、!$は最後のパラメータを取得します。!:nはn番目の要素を取得します。
bind -lp
して現在のバインディングを確認するのが好きです。