如何只列出用户定义的别名?

如何只列出用户定义的别名?

我正在使用 ZSH 并定义了一些别名(存储在多个罚款中,加载在 中~/.zshrc)。效果很好。执行该命令alias可以列出所有可用的别名。

现在我希望能够仅列出自定义别名,意思是:仅由当前用户定义的别名。我怎样才能做到这一点?

答案1

~/.zshrc您可以在开始在您的(或您定义的任何地方)中定义您自己的任何别名之前记录别名列表。自己的别名):

aliases_before=()
printf -v aliases_before '%s=%s' "${(kv@)aliases}"

然后将其与当前列表进行比较。

aliases_now=()
printf -v aliases_now '%s=%s' "${(kv@)aliases}"
print -rC1 'Now and not before:' ${aliases_now:|aliases_before}

这是使用$aliases特殊的关联数组来公开列表普通的别名及其定义。请参阅$galiases$saliases了解全局别名和后缀别名。

请注意,如果您按照之前定义别名的方式重新定义别名,则它不会显示在该列表中。


另一种方法是使用一个my-alias函数来定义别名,将它们记录在自己的关联数组中

typeset -A my_aliases
my-alias() {
  local alias
  for alias do
    my_aliases[${alias%%=*}]=${alias#*=}
  done
  alias "$@"
}

然后:typeset my_aliases查看您的别名。


请注意,别名更多的是 csh 功能。类似 Bourne 的 shell 具有更优越的功能(尽管不能用于别名所用的所有功能)。

如果您将别名定义为函数,例如la() ls -la "$@"代替alias ls='ls -la',那么您将能够查询给定文件中定义的函数列表。

例如,

print -rC1 -- ${(k)functions_source[(Re)$HOME/.zshrc]}

~/.zshrc将列出, 和中定义的函数

whence -f --  ${(k)functions_source[(Re)$HOME/.zshrc]}

还会显示他们的定义。

相关内容