現在のエイリアスセットに基づいて新しいエイリアスセットを作成しますか(例:gst -> dst)。

現在のエイリアスセットに基づいて新しいエイリアスセットを作成しますか(例:gst -> dst)。

zshプラグインのgitエイリアスを使用しています。https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git

したがって、次のようなgitエイリアスがあります。

gst # git status
ga # git add
gc "commit" # git commit -v "commit"
...

...また、git bare repoを使用してすべてのドットファイルをバックアップします。https://github.com/Anthonyive/dotfiles/blob/0706bc81daa3aeb7899b506cd89d4ab78fc7b176/USAGE.md

特に、git bare repoテクノロジは、gitコマンドのエイリアスを次のように指定しますdotfiles

alias dotfiles='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
alias d='dotfiles'

それでは、すべてのgit aliasコマンドをどのようにマッピングしますかd?良い:

dst # similar to gst, but uses the dotfiles alias
da # similar to ga
dc "commit" # similar to gc "commit"
...

一つずつマッピングするのは面倒そうです...

答え1

連想配列aliasesすべてのエイリアス定義を含みます。

for name in "${(@k)aliases}"; do
  if [[ $name == g* && $aliases[$name] == 'git '* ]]; then
    alias d${name#g}="dotfiles ${aliases[$name]#git }"
  fi
done

または、dエイリアスを次のgitコマンドが必要な関数に変更することもできますが、最初にシェルエイリアスを展開して先行しますgit

alias d='d ' # expand aliases after d
function d {
  if [[ $1 == "git" ]]; then shift; fi
  dotfiles "$@"
}

その後d gst実行されますdotfiles statusd gc myfile実行されますdotfiles commit myfiled ls-tree実行されますdotfiles ls-tree。完了は可能ですが、簡単ではありません。

答え2

gitすべての呼び出しをに置き換えるには、git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME次の関数を使用できます。

git() {
  command git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME "$@"
}

しかし、この場合、実際にそうする必要はありません。gitこれらのオプションフラグを次に渡す代わりに:

export GIT_DIR=$HOME/.dotfiles/
export GIT_WORK_TREE=$HOME

バラよりhttps://www.git-scm.com/docs/git#Documentation/git.txt---git-dirltpathgt


ところで、多くのエイリアスを維持して記憶しようとする代わりに、次のものを使用できます。zsh-autocomplete記録完了モード。 (免責事項:私はこのプラグインの管理者です。)

ここに画像の説明を入力してください。

関連情報