
Ich habe meine OS X Yosemite-Shell auf Zsh geändert und mit "oh my zsh"-Plugins konfiguriert. Vor kurzem habe ich proxychains-ng als Proxy-Befehlszeilentools installiert, aber ich habe festgestellt, dass die Zsh-Vervollständigung für den Befehl nach proxychains4 nicht funktioniert, wie
proxychains4 wget [hit tab], will not come up with wget's options
proxychains4 gi[tab], will not come up with "git"
Und zsh funktioniert auch nicht auf Befehl nach Alias,
alias proxy="http_proxy=http://127.0.0.1:12345"
proxy brew[hit tab], will not come up with brew's subcommands
Es wird keine Vervollständigungen für den Befehl und seine Option geben. Irgendeine Idee? Danke.
Antwort1
Standardmäßig erweitert zsh den Alias, bevor es die Vervollständigung durchführt. Es ist möglich, dass Ihre Konfiguration dies deaktiviert. Sie können es explizit wieder aktivieren, indem Sie diecomplete_aliases
Möglichkeit.
unsetopt complete_aliases
Für einen externen Befehl wie proxychains4
können Sie deklarieren, dass seine Argumente selbst ein Befehl sind und seine Argumente, indem Sie seine Vervollständigung_precommand
. Dies ist in der Dokumentation nicht leicht zu finden, aber Sie können die Konfiguration für ähnliche Befehle beobachten, indem Sie beispielsweise nohup
ausführen echo $_comps[nohup]
. Dies geschieht mit dem „neuen“ Vervollständigungssystem (nach dem Ausführen von compinit
).
compdef _precommand proxychains4
Antwort2
nun, ich habe eine Lösung im Sudo-Plugin von „oh my zsh“ gefunden, hier ist der vom Sudo-Plugin geänderte Code, ich nenne ihn proxychains-ng-plugins.zsh, platziere ihn in $ZSH_CUSTOM/plugins/proxychain-ng/ und lade ihn nach ~/.zshrc, plugins=(), dann Quelle ~/.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
Geben Sie also zuerst einen Befehl ein und drücken Sie dann ESC+STRG. Proxychains4 wird am Anfang angehängt.
aber das ist nicht die Antwort auf meine Frage.