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

Ste*_*hoi 4 git bash alias zsh oh-my-zsh

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

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

alias grs="git restore --staged ."
Run Code Online (Sandbox Code Playgroud)

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

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

它会导致此错误:

/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 `()'
Run Code Online (Sandbox Code Playgroud)

当我尝试bash-style 函数时:

function grs() {
Run Code Online (Sandbox Code Playgroud)

他们只是被忽视。


我尝试过的事情

  • .zshrc当我导出或获取 OhMyZsh 和我的别名(此处引用)时,我已经移动过,但没有区别。

  • 我尝试使用ZSH_CUSTOM=/Users/StevenChoi/.aliases/.zsh_aliases并创建一个plugins文件夹(我认为我正确地遵循了这些指示),但结果相同。

  • #!/bin/zsh在每个文件的顶部和.zsh每个文件名的末尾添加了内容,只是为了彻底(并不是我期望的太多)。

  • 注意:我还想避免接触.oh-my-zsh/plugins/git/git.plugin.zsh目录.oh-my-zsh,除非这是唯一的方法。

  • 编辑:将命令压缩为一行会牺牲参数处理。我现在一直在使用我为自己提供的解决方案,但它无法处理参数,仅将它们作为空字符串返回。为了更好的解决方案,它必须是一个多行别名/函数,既替换 OhMyZsh 中的别名,又接受和处理参数。

Ste*_*hoi 5

最终编辑:实际的解决方案由 @simont 作为此问题的链接提供。请忽略水平线以下的所有内容,我将其保留下来以供记录。

只需取消设置别名并立即重新设置即可。

unalias grs

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

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

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

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

alias grs="if [ $# -eq 0 ];then;git restore --staged .;else;git restore --staged \"$@\";fi;"
Run Code Online (Sandbox Code Playgroud)

zsh这是我自从迁移到(通常看起来更好)以来见过的最丑陋的事情之一,但我认为这是值得的。如果有人有更优雅的解决方案,我很高兴听到。