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



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() {

他们只是被忽视了。


我尝试过的东西

  • 当我在.zshrc中导出或获取OhMyZsh和我的别名时,我已经四处走动了(此处引用(,但没有区别。

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

  • 我在每个文件的顶部添加了#!/bin/zsh,在每个文件名的末尾添加了.zsh,只是为了彻底起见(并不是我期望的那么多(。

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

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

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

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

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

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

在详细介绍我的问题时,从这里找到了一个解决方案。

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

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

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

最新更新