
Cambié mi shell de OS X Yosemite a Zsh y lo configuré con complementos "oh my zsh". Recientemente instalé proxychains-ng en herramientas de línea de comando proxy, pero descubrí que la finalización de zsh no funciona en el comando después de proxychains4, como
proxychains4 wget [hit tab], will not come up with wget's options
proxychains4 gi[tab], will not come up with "git"
Y zsh tampoco funciona con el comando después del alias,
alias proxy="http_proxy=http://127.0.0.1:12345"
proxy brew[hit tab], will not come up with brew's subcommands
no habrá finalizaciones para el comando y su opción. ¿Alguna idea? gracias.
Respuesta1
De forma predeterminada, zsh expande el alias antes de completarlo. Es posible que su configuración deshabilite esto; puedes volver a habilitarlo explícitamente desarmando elcomplete_aliases
opción.
unsetopt complete_aliases
Para un comando externo como proxychains4
, puede declarar que sus argumentos son en sí mismos un comando y sus argumentos al completarlo._precommand
. Esto no es fácil de encontrar en la documentación, pero puede observar la configuración de comandos similares, como nohup
ejecutar echo $_comps[nohup]
. Esto es con el “nuevo” sistema de finalización (después de ejecutar compinit
).
compdef _precommand proxychains4
Respuesta2
bueno, encontré una solución del complemento sudo de "oh my zsh", aquí está el código modificado del complemento sudo, lo llamo proxychains-ng-plugins.zsh, colóquelo en $ZSH_CUSTOM/plugins/proxychain-ng/, y cárguelo en ~/.zshrc, plugins=(), luego fuente ~/.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
así que primero escriba un comando, luego presione ESC+CTRL, proxychains4 se agregará al principio.
pero esta no es la respuesta a mi pregunta.