Zsh conclusão no segundo comando ou depois de um alias?

4

Eu mudei meu shell OS X Yosemite para Zsh e configurado com plugins "oh my zsh", recentemente instalei proxychains-ng para ferramentas de linha de comando proxy, mas achei conclusão 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 o zsh também não funciona no comando depois do 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 é uma opção. Qualquer ideia? obrigado.

    
por Justin He 07.01.2015 / 09:03

2 respostas

8

Por padrão, o zsh expande o alias antes de fazer a conclusão. É possível que sua configuração desative isso; você pode reativá-lo explicitamente desativando a complete_aliases opção .

unsetopt complete_aliases

Para um comando externo como proxychains4 , você pode declarar que seus próprios argumentos são um comando e seus argumentos fazendo sua conclusão _precommand . Isso não é fácil de encontrar na documentação, mas você pode observar a configuração de comandos semelhantes, como nohup , executando echo $_comps[nohup] . Isso é com o "novo" sistema de conclusão (depois de executar compinit ).

compdef _precommand proxychains4
    
por 08.01.2015 / 01:25
0

bem, eu encontrei uma solução do plugin sudo de "oh my zsh", aqui está o código modificado do plugin sudo, eu chamo de proxychains-ng-plugins.zsh, coloque-o em $ ZSH_CUSTOM / plugins / proxychain- ng /, e carrega-o em ~ / .zshrc, plugins = (), depois em 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 e, em seguida, hist ESC + CTRL, proxychains4 será anexado no começo.

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

    
por 07.01.2015 / 09:37