Tab 完成全局别名而不是在行首

Tab 完成全局别名而不是在行首

我有很多这样的别名

alias -g foo=cmd1
alias -g faz=cmd2
alias -g fam=cmd3

在 shell 中(我使用的是 zsh)我希望能够输入

echo fa<TAB>

并提示输入fazfam

完整别名选项似乎不正确(并且不起作用),并且 compdef 用于完成cmd*不完成别名本身。

如果我在行的开头使用别名,它们提供选项卡完成。仅当它用于生产线中的其他地方时才有效。

类似 oh-my-zsh 的功能全局别名适用于在输入全名并推入空格后扩展别名,但我正在寻找一些可以扩展别名的东西,如果我不记得它的全名的话。

答案1

将其添加到您的~/.zshrc文件中:

autoload -Uz compinit
compinit
# The code below should come _after_ initializing the completion system.

# Autoload the `galiases` table.
zmodload -Fa zsh/parameter p:galiases

# Whenever a completion is attempted, first run `_galiases`.
compdef _galiases -first-

_galiases() {
  # Add the completions to the `aliases` group.
  local expl
  _description aliases expl 'alias'

  # Add the keys from `galiases` as the actual completions.
  compadd "$expl[@]" -Q -k galiases
}

(请注意,您不能将多个完成函数定义为-first-。如果您有其他应首先调用的完成函数,那么您应该定义一个调用所有这些函数的伞函数。)

文档:

相关内容