开发者

ZSH: how can I run Vim-style substitute command in command line?

开发者 https://www.devze.com 2022-12-27 14:09 出处:网络
I forgot the array syntax while on Zsh-commandline: $ hello=[1,2,3,4] %ERR: I want to fix the problem开发者_开发问答 by substitution. In Vim, I would do :.s@,@ @g.

I forgot the array syntax while on Zsh-commandline:

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

I want to fix the problem开发者_开发问答 by substitution. In Vim, I would do :.s@,@ @g. So how can I edit the current line, or let call it a current buffer, by running a command on it?


[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)

See zshexpn(1) for more information of history completion/alternation.


Only using custom zle widget, for example:

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
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号