# Replace an argument to a command, delimited by normal shell syntax. # Prompts for the replacement. # With no numeric argument, replace the current argument. # With a numeric argument, replace that argument: 0 = command word, # as in history expansion. # If editing buffer is empty, use previous history line. autoload -Uz split-shell-arguments read-from-minibuffer if (( ${#BUFFER} == 0 )); then (( HISTNO-- )) CURSOR=${#BUFFER} fi local widget=$WIDGET integer numeric cursor=CURSOR if (( ${+NUMERIC} )); then numeric=$NUMERIC else numeric=-1 fi local reply REPLY REPLY2 integer index split-shell-arguments if (( numeric >= 0 )); then index=$(( 2 + 2*numeric )) else index=$((REPLY & ~1 )) fi local edit if [[ $widget = *edit* ]]; then edit=$reply[$index] fi read-from-minibuffer "Replace $reply[$index] with: " $edit || return 1 integer diff=$(( ${#REPLY} - ${#reply[$index]} )) reply[$index]=$REPLY BUFFER=${(j..)reply} if (( cursor > REPLY2 )); then (( CURSOR = cursor + diff )) else (( CURSOR = REPLY2 )) fi