2010-04-15 247 views

回答

4
[jkramer/sgi5k:~]# list=(1,2,3,4,5,6,7,8,9,10) 
[jkramer/sgi5k:~]# !:gs/,//     
list=(1 2 3 4 5 6 7 8 9 10) 

见zshexpn(1)历史完成/交替的更多信息。

2

只有使用自定义窗口小部件ZLE,例如:

function _-sedsubs() 
{ 
    emulate -LR zsh 
    zle -R "Substitution:" 
    local SEDARG="s" 
    local key="" 
    read -k key 
    local -r start=$key 
    while (((#key)!=(##\n) && 
      (#key)!=(##\r))) ; do 
     if (((#key)==(##^?) || (#key)==(##^h))) ; then 
      SEDARG=${SEDARG[1,-2]} 
     else 
      SEDARG="${SEDARG}$key" 
     fi 
     zle -R "Substitution: $SEDARG" 
     read -k key || return 1 
    done 
    BUFFER="$(echo $BUFFER | sed -r -e "$SEDARG")" 
} 
zle -N sedsubstitute      _-sedsubs 
bindkey "\C-o:s" sedsubstitute