ZSH:如何在命令行中运行Vim-style substitute命令?

时间:2010-04-15 16:38:30

标签: vim buffer zsh

我在Zsh-commandline上忘记了数组语法:

$ hello=[1,2,3,4] %ERR: 

我想通过替换解决问题。在Vim,我会做:.s@,@ @g。 那么如何编辑当前行,或者通过在其上运行命令将其称为当前缓冲区?

2 个答案:

答案 0 :(得分: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)。

答案 1 :(得分:2)

仅使用自定义zle小部件,例如:

function _-sedsubs()
{
    emulate -LR zsh
    local SEDARG="s"
    zle -R "Substitution: $SEDARG"
    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