OhMyZsh:使用自定义多行别名/函数覆盖 Git 插件别名

OhMyZsh: override Git plugin aliases with custom multi-line aliases / functions

tl;dr - 我想用多行别名/函数覆盖 OhMyZsh 的 Git 别名。

我正在尝试从 bash 切换到 zsh 并迁移我的别名。我可以通过这个(示例)覆盖 OhMyZsh 的 Git 别名:

alias grs="git restore --staged ."

但是,当我尝试使用 zsh 函数时(对于 OhMyZsh 中已经存在的别名):

grs() {
  if [ $# -eq 0 ]
  then
    git restore --staged .
  else
    git restore --staged "$@"
  fi
}

它导致此错误:

/Users/StevenChoi/.aliases/.zsh_aliases/.g_aliases.zsh:102: defining function based on alias `grs'
/Users/StevenChoi/.aliases/.zsh_aliases/.g_aliases.zsh:102: parse error near `()'

当我尝试 bash 风格的函数时:

function grs() {

他们只是被忽略了。


我尝试过的事情

最终编辑:实际解决方案由@simont 作为 link 到 this question 提供。请忽略水平线以下的所有内容,我将留下记录。

只需取消设置别名,然后立即重新设置即可。

unalias grs

grs() {
  if [ $# -eq 0 ]
  then
    git restore --staged .
  else
    git restore --staged "$@"
  fi
}

编辑:此解决方案无法正确处理参数!虽然这个解决方案足以让我畅通无阻,但现在的问题是找到一个既可以替换 OhMyZsh 中的别名又可以接受和处理参数的解决方案。

在详细说明我的问题时从 here 找到了解决方案。

我只是将我所有的多行函数转换为单行别名(示例):

alias grs="if [ $# -eq 0 ];then;git restore --staged .;else;git restore --staged \"$@\";fi;"

这是我迁移到 zsh 后看到的最丑陋的东西之一(通常看起来更漂亮),但我认为这是值得的。如果有人有更优雅的解决方案,我很乐意听到。