前のコマンドラインで右矢印キーを使用して一度に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