ZSH 函数根据 cli 上的输入编辑文件

ZSH 函数根据 cli 上的输入编辑文件

我需要在 zsh 中设置一个函数,该函数将根据命令行上的某些输入编辑不同的文件。

我想简化我的别名,这样我就不需要多个别名来做同样的事情,但略有不同。我特别尝试设置一个函数来在编辑器中打开不同版本的 php.ini 文件(适用于 php 5.4、5.5、5.6 和 7.0)

现在,我定义了以下别名:

alias editphpini54="subl /usr/local/etc/php/5.4/php.ini"
alias editphpini55="subl /usr/local/etc/php/5.5/php.ini"
alias editphpini56="subl /usr/local/etc/php/5.6/php.ini"
alias editphpini70="subl /usr/local/etc/php/7.0/php.ini"

我想做的是设置一个名为 的函数editphpini,然后输入一个变量(版本号)并让它智能地打开正确的文件。只要基本路径保持不变,这也可以是面向未来的。

所以,我想做的是能够输入

editphpini 54

并让函数解析该命令并加载php.ini位于的文件/usr/local/etc/php/5.4/php.ini

使用上面的示例,我就可以在命令末尾替换55 56或,从而发出相关命令。70

在我看来,该函数将获取版本号,使用 来XX将其插入命令中来定义版本号。subl /usr/local/etc/php/X.X/php.iniXX

老实说,我已经尝试了多种方法,但似乎没有任何效果,因此,如果有人能指出我正确的方向,我将不胜感激,而不是仅仅列出我所有失败的尝试。

谢谢你,

阿里

答案1

editphpini() subl /usr/local/etc/php/${1[1]}.${1[2,-1]}/php.ini

${1[1]}.${1[2,-1]}xyz是转变为的众多方法之一x.yz。其他方法可以是:${1[1]}.${1#?}、 或${1/(#m)?/$MATCH.}${(j:.:)${(s::)1}}(对于x.y.z

答案2

function editphpini() {
    local version=$( echo $1 | sed 's/^\(.\)/\1./' )

    subl /usr/local/etc/php/${version}/php.ini
}

用法:

% editphpini 54

相关内容