web-dev-qa-db-ja.com

zsh:前のコマンドのすべての引数を再利用します

zshでは、キーの組み合わせ Alt+.insert-last-Wordにバインドされ、前のコマンドの最後の引数を現在のコマンドラインに挿入します。

私は同様に動作するキーバインド/ショートカットを探しています Alt+.ただし、前のコマンドのすべての引数をコマンドラインに貼り付けます。

!*と入力できることはわかっていますが、zshはそれを「前のコマンドのすべての引数を再利用する」と解釈します。しかし、これは私が探しているものではありません。また、実際に引数を貼り付けて表示できるようにするのではなく、zshは!*をそのように解釈するだけです。私は打つことができた Tab 拡張する必要がありますが、それはさらに別のコマンドが必要です。

私はこれを次のような重要な組み合わせとして使用したいと思います Alt+something、「!*」と入力してタブを押す代わりに

これどうやってするの ?

2
Martin Vegter

前の履歴エントリの最初のWordを除くすべてを挿入するには、次のようなカスタムウィジェットを定義できます。

insert-last-words() {
  emulate -L zsh
  set -o extendedglob

  if [[ $WIDGET = $LASTWIDGET ]]; then
    # subsequent invocations go further back in history like
    # insert-last-Word

    zle undo # previous invocation
    ((INSERT_LAST_WORDS_INDEX += ${1--1}))
  else
    INSERT_LAST_WORDS_INDEX=0
  fi

  local lastwords
  local cmd=${history:$INSERT_LAST_WORDS_INDEX:1}
  lastwords=(${(z)cmd})
  (($#lastwords > 1)) || return

  cmd=${cmd##[[:space:]]#$lastwords[1][[:space:]]#}
  LBUFFER+=$cmd
}

zle -N insert-last-words
bindkey '\e,' insert-last-words

(ここにバインドされています Alt+,)。

3