Conclusão Zsh no segundo comando ou após um alias?

Conclusão Zsh no segundo comando ou após um alias?

Mudei meu shell do OS X Yosemite para Zsh e configurei com plug-ins "oh my zsh", recentemente instalei proxychains-ng para ferramentas de linha de comando de proxy, mas descobri que a conclusão do zsh não funciona no comando após proxychains4, como

proxychains4 wget [hit tab], will not come up with wget's options
proxychains4 gi[tab], will not come up with "git"

E zsh também não funciona sob comando após alias,

alias proxy="http_proxy=http://127.0.0.1:12345"
proxy brew[hit tab], will not come up with brew's subcommands

não haverá conclusões para o comando e sua opção. Qualquer ideia? obrigado.

Responder1

Por padrão, o zsh expande o alias antes de concluir. É possível que sua configuração desabilite isso; você pode reativá-lo explicitamente desativando ocomplete_aliasesopção.

unsetopt complete_aliases

Para um comando externo como proxychains4, você pode declarar que seus argumentos são eles próprios um comando e seus argumentos completando-o_precommand. Isso não é fácil de encontrar na documentação, mas você pode observar a configuração de comandos semelhantes, como nohupexecutar echo $_comps[nohup]. Isso ocorre com o “novo” sistema de conclusão (após a execução compinit).

compdef _precommand proxychains4

Responder2

bem, encontrei uma solução do plugin sudo de "oh my zsh", aqui está o código modificado do plugin sudo, eu chamo-o de proxychains-ng-plugins.zsh, coloque-o em $ZSH_CUSTOM/plugins/proxychain-ng/, e carregue-o em ~/.zshrc, plugins=(), então source ~/.zshrc :

# ------------------------------------------------------------------------------
# Description
# -----------
#
# sudo will be inserted before the command
#
# ------------------------------------------------------------------------------
# Authors
# -------
#
# * Dongweiming <[email protected]>
#
# ------------------------------------------------------------------------------

proxychains-ng-command-line() {
[[ -z $BUFFER ]] && zle up-history
[[ $BUFFER != proxychains4\ * ]] && BUFFER="proxychains4 -q $BUFFER"
zle end-of-line
}
zle -N proxychains-ng-command-line
# Defined shortcut keys: [Esc] [Esc]
bindkey "\e^" proxychains-ng-command-line

então digite um comando primeiro, depois hist ESC + CTRL, proxychains4 será anexado no início.

mas esta não é a resposta à minha pergunta.

informação relacionada