CLIの入力に基づいてファイルを編集するZSH機能

CLIの入力に基づいてファイルを編集するZSH機能

コマンドラインからの特定の入力に基づいて他のファイルを編集する機能を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

関連情報