
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_aliases
opçã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 nohup
executar 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.