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
(通常看起来更好(以来,这是我见过的最丑陋的事情之一,但我认为这是值得的。如果有人有更优雅的解决方案,我很乐意听到。