web-dev-qa-db-ja.com

前のコマンドの最後の部分を繰り返す方法は?

Robby Russellの oh-my-zsh フレームワークでzshを使用しています。コマンドの最後の部分を繰り返すショートカットまたは何かを作成するにはどうすればよいですか?

たとえば、次のように入力した場合:

mv something in/this/difficult/to/type/directory

これを簡単に取得する方法はありますか:in/this/difficult/to/type/directory?

46
Carlo

私はテストしたところ、bashと同じ方法で実行できるようです:!$

43
Kevin

!*[〜#〜] all [〜#〜]最後のコマンドの引数を提供します。

例:

% echo hello world  
hello world

% echo !*  
(expands to)-> % echo hello world
hello world
17
Dave

bashまたはzshのどちらにいても、!演算子を使用して前のコマンドの引数を復元できます。

例として:echo a b c dを例として

  • !$-最後の引数:d
  • !:*-すべての引数:a b c d(短縮可能!*
  • !:1-最初の引数:a!^と同じ)
  • !:1-3-最初から3番目までの引数:a b c
  • !:2-$-2番目から最後の引数:b c d

この最後の点はあなたの質問に答えます、あなたはあなたのコマンドの最後の部分を取ることができます。

注:$:0は最後に実行されたコマンドです。この例ではechoになります。

17
Charles Gueunet

バインドキー「\ e」を追加します。あなたの.zshrcにinsert-last-Word

-sp3ctum、コメント ここ

13
Andrew Vandever

!$は、前のコマンドの最後のパラメーターを提供します。

例:

$ echo hello world
hello world
$ echo !$
echo world
world
13
dogbane

私もこれに遭遇しました-私はいつもAlt.はbashのinsert-last-Wordです。 oh-my-zshがこれをオーバーライドする場所が見つかりました。

Lib/key-bindings.zshで、これをコメントアウトします。bashのように機能します。

bindkey -s '\e.' "..\n"

8
Brian Ray

<esc>.zshoh-my-zshですぐに使用できます。

4
ha7ilm

@Charles Gueunetの回答を拡張するだけです。

  • !!-最後のコマンド全体を繰り返します

これは、コマンドの先頭にSudoを追加し忘れた場合に役立ちます。簡単な例:

$ cat /some/root/owned/thing/with/a/long/path
Permission denied
$ Sudo !!
here's the conent
0
Arj