如何覆盖我的 shell (Oh My Zsh) 中的别名?

如何覆盖我的 shell (Oh My Zsh) 中的别名?

我想为我的 ls 命令添加别名,但它有一个先前定义的别名,我相信它在我的定义之前首先被调用!我使用 .zshrc 来定义我的别名,这就是我所做的:

alias ls="ls --classify --almost-all --group-directories-first"

这是别名命令的输出:

$ alias | grep "ls="
ls='ls --color=tty'

是否有任何可能的操作来查看另一个别名的定义位置?或者用新的覆盖它?

注意:我使用 ZSH,并且我已经在 .profile 和我知道可能有帮助的其他相关文件中搜索了它。如果有任何文件需要我检查,请评论。

答案1

alias命令用相同的名称覆盖以前的别名。所以一般来说,如果您希望别名覆盖 zsh 框架定义的别名,把它们放在你的末尾.zshrc。其他诸如函数定义、变量赋值、键绑定等也是如此。一般来说,最新的定义获胜。

“最新定义获胜”的一个边缘情况是,它只是同类对象的最新定义。特别是,别名、函数和外部命令是不同类型的对象,例如在定义同名别名后定义函数不会覆盖别名。你需要unalias先打电话。 (另请注意, foo () { … }when is an alias 的语法foo会扩展别名 - 确保unalias首先扩展别名,或者使用该function foo { … }语法。)

有时,可以通过以下方式在运行时覆盖设置钩子函数。例如,在进入或离开版本控制目录时,帮助进行版本控制的框架通常会更改变量以及可能的别名或函数。发生这种情况时,您必须修改现有的钩子或在您不完全喜欢的钩子之后运行您自己的钩子。


如果您无法确定别名的设置位置,请运行script -c 'zsh -x',然后键入exit。这将创建一个名为 的文件,typescript其中包含 zsh 在初始化期间运行的所有命令的日志。在该文件中,搜索alias ls=. (也可能是类似的东西alias foo=bar ls=whatever。)

相关内容