Zsh

根據目前的別名集(例如 gst -> dst)創建新的別名集?

  • May 25, 2021

我正在使用來自 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 statusd gc myfile將執行dotfiles commit myfiled ls-tree將執行dotfiles ls-tree等。完成是可行的,但並不容易。

引用自:https://unix.stackexchange.com/questions/650955