前のコマンドのパラメータを入力します。

前のコマンドのパラメータを入力します。

前のコマンドラインで右矢印キーを使用して一度に1つのパラメータを入力できますか?

$ mogrify -resize 50% file.jpg
$

ここで右矢印を押すとが埋められmogrify、もう一度右矢印を押すまで塗りつぶす必要があります。mogrify -resizeもう一度押すmogrify -resize 50%とが続きます。

これまでのコマンドラインが前のコマンドラインと一致しない場合は、最後に一致したコマンドから入力する必要があります。

$ mogrify -resize 50% file.jpg
$ echo hi
$ mo

mogrify右矢印を押すとnotがいっぱいになるはずですecho

これをサポートするようにzshをどのように設定しますか?

答え1

次のコードは、Rightコマンドラインの末尾にあることを除いて正常に機能します。コマンドラインの末尾にある場合は、現在の行のテキストで始まる一致する古い履歴行を見つけます(スペースを含む正確に同じテキストでなければなりません)。見つかったら、次の単語が始まるまで一致する行の次の部分を挿入します。数値パラメータNを使用して、一致するN行目から抽出します。

function immediate-complete-word-from-full-history {
  emulate -L zsh
  setopt extended_glob
  local line=${${history[(R)${(b)LBUFFER}*]}[${NUMERIC:-1}]}
  local blank=$' \t\n\f'
  if [[ -z $line ]]; then return; fi
  line=${line#$LBUFFER}
  LBUFFER+=${line%"${line##[^$blank]##[$blank]#}"}
}

function forward-char-or-immediate-complete-word-from-full-history {
  if [[ -n $RBUFFER ]]; then
    zle forward-char
  else
    immediate-complete-word-from-full-history
  fi
}

zle -N forward-char-or-immediate-complete-word-from-full-history
bindkey '\e[C' forward-char-or-immediate-complete-word-from-full-history
bindkey '\eOC' forward-char-or-immediate-complete-word-from-full-history

既知のバグ:改行を含む履歴行では機能しません。改行は行内の実際の改行と区別できないようfcに出力されるからです。完全に正しい解決策はで始まる必要があります。\n\n$history

関連情報