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

标签 bash git alias zsh oh-my-zsh

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(引用 here)中导出或获取 OhMyZsh 和我的别名时,我四处走动,但没有区别。

  • 我试过使用 ZSH_CUSTOM=/Users/StevenChoi/.aliases/.zsh_aliases 并创建一个 plugins 文件夹(我想我遵循了 these directions正确),但结果相同。

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

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

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

最佳答案

最终编辑:@simont 提供了实际解决方案,作为指向 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 后看到的最丑陋的东西之一(通常看起来更漂亮),但我认为这是值得的。如果有人有更优雅的解决方案,我很乐意听到。

关于bash - OhMyZsh : override Git plugin aliases with custom multi-line aliases/functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61109665/

相关文章:

bash - 如果文件存在始终为 false

linux - 目录名称 Bash 中的空格

git - SSH 从远程服务器推送到 git

windows - Apache 网络驱动器别名

javascript - 使用已定义的选项值定义 grunt 别名

bash - 使用 bash 通过 ssh 启动一个进程,然后在 sigint 上终止它

Bash,使用 IFS 从文件中逐行读取

java - Eclipse - 外部 JAR 和 git

git - Git 中的 user.name 是否可以有尾随句点?

linux - 输入的别名。 Unix