Zsh 过度替换别名

Zsh over-substituting aliases

在Bash中,运行tmux ls正常工作。但是,在 Zsh 中,我收到此错误:

tmux: unknown option -- p
usage: list-sessions [-F format]

我怀疑这是因为 Zsh 将命令的 ls 替换为我为 ls:

自定义的别名
alias -g ls='ls -p --color'

我尝试设置 alias -g tmux\ ls='tmux list-sessions',但没有成功。

有什么方法可以改变 Zsh 的别名 expansion/substitution 行为吗?

您正在将 ls 定义为全局别名,这意味着它在 任何地方 shell 看到 ls 时扩展,而不仅仅是当它用作命令。只需删除 -g 选项:

alias ls='ls -p --color'

在 zsh 中,当你使用 alias -g 时你有全局别名。全局别名是一种不仅在命令开头而且在任何地方都有效的别名。 这不是你想要的!

但是全局别名可以非常强大和有用。例如:

alias -g L="| less" # to page the output with less
alias -g WL="| wc -l"  # to have stats from wc
alias -g CP="| xclip -f -r" # to copy output into clipboard
alias -g NU="&> /dev/null" # to remove error and standard outputs

要使用它们:

ps aux L  # expanded into: ps aux | less
ls -1 WL # expanded into: ls -1 | wc -l
date CP # expanded into: date | xclip -f -r
ls /foo2 /usr NU || echo okay # expanded into: ls /foo2 /usr &> /dev/null || ...