Fish shell中是否有类似Zsh的路径替换?

MJV*_*MJV 3 fish

我在OS X中尝试Fish shell,并且想知道是否存在与Zsh相同的路径替换功能,即

user@machine ~> % cd /usr/www/site1/current/log
user@machine /usr/www/site1/current/log
%> cd site1 site2
/usr/www/site2/current/log
user@machine /usr/www/site2/current/log
%>
Run Code Online (Sandbox Code Playgroud)

这个例子来自SlideShare,为什么Zsh比你的Shell更酷.

我在Fish中试过但它似乎不起作用,至少使用相同的语法.我也没有在Fish文档中找到任何"路径替换"的内容.

MJV*_*MJV 5

显然Fish不支持开箱即用的路径更换.

我通过在~/.config/fish/functions调用中创建一个简单的自定义函数来解决问题cd.fish:

function cd
    if test (count $argv) -eq 2
            builtin cd (echo $PWD|sed -e "s/$argv[1]/$argv[2]/")
    else
            builtin cd $argv
    end
end
Run Code Online (Sandbox Code Playgroud)

对于习惯于使用Zsh但确实在问题中起作用的人来说,这可能并不完美.

注意:Fish已经拥有自己的cd功能版本,所以最好将这部分Fish的开箱即用版本完全替换掉.这仅是为了清楚起见的部分示例.