我正在使用 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]}
还会显示他们的定义。