Zsh
根據目前的別名集(例如 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" ...
一張一張地映射它們似乎很乏味……
關聯數組
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 命令的函式,但首先擴展 shell 別名並刪除任何前導git
.alias d='d ' # expand aliases after d function d { if [[ $1 == "git" ]]; then shift; fi dotfiles "$@" }
然後
d gst
將執行dotfiles status
,d gc myfile
將執行dotfiles commit myfile
,d ls-tree
將執行dotfiles ls-tree
等。完成是可行的,但並不容易。