2番目のコマンドまたはエイリアスの後にZshは完了しましたか?

2番目のコマンドまたはエイリアスの後にZshは完了しましたか?

OSを変更しました

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

そして、zshはエイリアスの後のコマンドには適用されません。

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

コマンドとそのオプションは完了しません。どんなアイデアがありますか?ありがとうございます。

答え1

デフォルトでは、zshは完了する前にエイリアスを拡張します。構成でこの機能を無効にした可能性があります。設定を解除して明示的に再度有効にできます。complete_aliasesオプション

unsetopt complete_aliases

このような外部コマンドの場合、proxychains4パラメーター自体がコマンドであることを宣言し、パラメーターは以下を完了して宣言します。_precommand。これは文書内で簡単には見つかりませんが、nohup実行して同様のコマンドの構成を観察できますecho $_comps[nohup]。これは「新しい」システムで実行されます(実行後compinit)。

compdef _precommand proxychains4

答え2

まあ、私は「oh my zsh」のsudoプラグインで解決策を見つけました。これはsudoプラグインで修正されたコードです。私はこれをProxychains-ng-plugins.zshと呼び、$ZSH_CUSTOM/plugins /proxychain-ng/に配置しました。 ~/.zshrc、プラグイン=()にロードし、 ~/.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

したがって、最初にコマンドを入力してからESC + CTRLを押すと、Proxychains4が最初に追加されます。

しかし、これは私の質問に対する答えではありません。

関連情報