首页 > 解决方案 > 将 URL 解析为命令

问题描述

当我在终端中输入 git repo url 时,它具有以下输出:

% https://github.com/chmln/sd.git        
zsh: no such file or directory: https://github.com/chmln/sd.git

我想https://github.com/chmln/sd.git充当一个命令

git clone https://github.com/chmln/sd.git
cd sd

我试过preexec钩子。

preexec () { 
    print ">>>preexec start<<<"
    # print -l ${(qqq)@}

    if  [[ ${(qqq)@} =~ ^https.* ]]
    then
    echo URL
    fi
    print ">>>preexec end<<<"

}

输出是

% https://github.com/chmln/sd.git
>>>preexec start<<<
>>>preexec end<<<
zsh: no such file or directory: https://github.com/chmln/sd.git

我该如何解决这个问题。

标签: zsh

解决方案


function _accept-line-with-url {

    if  [[ $BUFFER =~ ^https.*git ]]
    then

        echo $BUFFER >> $HISTFILE
        fc -R

        BUFFERz="git clone $BUFFER && cd $(basename $BUFFER .git)"
        zle .kill-whole-line
        BUFFER=$BUFFERz
        zle .accept-line
    else 
        zle .accept-line
    fi 
}

zle -N accept-line _accept-line-with-url

现在您可以将 github url 粘贴到提示符中,它将克隆 repo。


推荐阅读