Ste*_*hoi 4 git bash alias zsh oh-my-zsh
tl;dr - 我想用多行别名/函数覆盖OhMyZsh的 Git 别名。
我正在尝试从 切换bash到zsh并迁移我的别名。我可以通过这个(示例)从 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 中的别名,又接受和处理参数。
最终编辑:实际的解决方案由 @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这是我自从迁移到(通常看起来更好)以来见过的最丑陋的事情之一,但我认为这是值得的。如果有人有更优雅的解决方案,我很高兴听到。
| 归档时间: |
|
| 查看次数: |
1933 次 |
| 最近记录: |