
OS X Yosemite シェルを Zsh に変更し、「oh my zsh」プラグインを設定しました。最近、プロキシコマンドラインツールに proxychains-ng をインストールしましたが、proxychains4 の後のコマンドでは zsh 補完が機能しないことがわかりました。
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 プラグインから 1 つの解決策を見つけました。これは sudo プラグインから変更されたコードです。これを proxychains-ng-plugins.zsh と呼び、$ZSH_CUSTOM/plugins/proxychain-ng/ に配置し、~/.zshrc、plugins=() にロードし、次に 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
最初にコマンドを入力し、次に ESC+CTRL を押すと、proxychains4 が先頭に追加されます。
しかし、これは私の質問に対する答えではありません。