そんなこと知ってる Esc + . 最後のコマンドの最後の引数を提供します。
しかし、最後のコマンドの最初の引数に興味があります。そうするためのキーバインディングはありますか?
同じ行に、最後のコマンドからn番目の引数を取得する一般的な方法はありますか? bashスクリプトでは、$0
、$1
などを使用できることを知っていますが、これらはコマンドラインでは機能しません。
また、前のコマンドの0番目の引数を繰り返し処理する場合は、連続してを押すことで最後の引数でできるように Esc + .?
M-.
(メタドットまたはesc-dotまたはalt-dot)がreadline関数yank-last-arg
、M-C-y
(meta-control-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-3Alt-Ctrl-y
押す Alt--2Alt-Ctrl-y
今、あなたは表示されます:
$ echo ace
ところで、引数0を選択することにより、行にecho
を置くことができます。
押す Alt-Alt-Ctrl-y
編集:
オリジナルに追加した質問に答えるには:
押すことができます Alt- その後、繰り返し押します Alt-. 前のコマンド(arg 0)をステップ実行します。同様に Alt-- その後繰り返し Alt-. 前の最後から2番目の引数をステップスルーできます。
履歴の特定の行に適切な引数がない場合、ベルが鳴ります。
頻繁に使用する特定の組み合わせがある場合は、1つのキーストロークで実行されるようにマクロを定義できます。この例では、前のコマンドの2番目の引数を呼び出します。 Alt-Shift-Y。このキーストロークの代わりに、使用可能な任意のキーストロークを選択できます。繰り返し押すと、前のステップをステップスルーできます。
試してみるには、Bashプロンプトでマクロを入力します。
bind '"\eY": "\e2\e."'
永続的にするには、次の行を~/.inputrc
ファイルに追加します。
"\eY": "\e2\e."
残念ながら、これはarg 0または負の引数番号では機能しないようです。
!$
は、前のコマンドライン引数の最後の要素を取得します。
最初の引数を使用するには、!^
または!: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-
の形式は、最後の引数を含まないため、直感に反します。
@larsmansの回答がとても好きだったので、もっと学ぶ必要がありました。この回答を追加すると、他の人がmanページセクションを見つけて、Googleで何をするのかを知ることができます。
$ 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番目を取得する方法があるかどうかはわかりません。
履歴内の任意のコマンドから引数を取得することもできます!
$ 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
基本的に、ヤンクprevious(コマンド)argumentsのヤンクに使用します。
たとえば、次のコマンドが発行された場合:
echo Hello, world how are you today?
次に、Hello,
が最初の引数になり、today?
が6番目になり、最後の引数になります。次のように入力することで参照できることを意味します。
Alt+6 に続く Ctrl-Alt-6
Ctrl 伝統的に、キー名の前に付加される帽子文字^
として示されます。 Alt M-
つまりMetaプレフィックス。
したがって、上記のショートカットは^My
としてヤンクに再定義できます。
また、コマンドラインにはhats置換ショートカットがあります。
echo Hello, world!
^Hello^Bye
Bye, world!
前のコマンドの最初に一致した文字列を置き換えるには、次を意味します。
Hello, world! Hello, people!
^Hello^Bye
結果として:
Bye, world! Hello, people!
2番目の一致(hello
)を変更せずに残します。
注:帽子の間のスペースのままにしないでください。操作が機能しません。
上記は単なるショートカットです:
!:s/Hello/Bye
前のコマンドで最初に見つかった(一致した)文字列のevent-level(*)置換。最初の部分の前にg
スイッチを付けると、行全体globally:
echo Hello, world! Hello, people!
!:gs/Hello/Bye
Bye, world! Bye, people!
通常、sed
、vi
、およびregex
(正規表現)などの他の関連コマンドで実行される-標準的な検索方法(match文字列)。
いいえ、ここでは
!:sg/Hello/Bye
または!:s/Hello/Bye/g
を実行できません。これが構文です!
それを自分で使って、マニュアルページ、ブログ、フォーラムなどのさまざまなソースから読んだものを自分で試してみて理解しました。
bash
、Bourne-Again Shell(発明者の姓にちなんでBourne Shellと呼ばれるsh
Shell)の不思議な方法に光が当てられることを願っています。サーバーを含む多くのディストリビューション(サーバーOSの)。
!^は最初のパラメータを取得し、!$は最後のパラメータを取得し、!:nはn番目の要素を取得します。
最後のコマンドは次のとおりです。
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/316312
bind -lp
bindkey -L
受け入れられた答えの最後に記載されている方法は、私にとってゼロ番目の引数でも機能します。 ~/.inputrc
に次の行があります:
"\en": "\e0\e."
"\em": "\e1\e."
"\e,": "\e2\e."
\e2\e.
には、\e2\e\C-y
に比べて、前のコマンドの2番目の引数を複数回挿入する代わりに、繰り返し押すと前のコマンドを繰り返すという利点があります。
前のコマンド全体を挿入するには、!!\e^
と入力できます。 \e^
はhistory-expand-line
です。