
Я изменил оболочку OS X Yosemite на Zsh и настроил ее с помощью плагинов «oh my zsh». Недавно я установил proxychains-ng для инструментов командной строки proxy, но обнаружил, что автодополнение zsh не работает для команды после proxychains4, например:
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 расширяет alias перед выполнением завершения. Возможно, ваша конфигурация отключает это; вы можете включить это явно, отменивcomplete_aliases
вариант.
unsetopt complete_aliases
Для внешней команды, например proxychains4
, вы можете объявить, что ее аргументы сами являются командой и ее аргументами, сделав ее завершение_precommand
. Это нелегко найти в документации, но вы можете наблюдать конфигурацию для похожих команд, например, nohup
запустив echo $_comps[nohup]
. Это с «новой» системой завершения (после запуска compinit
).
compdef _precommand proxychains4
решение2
ну, я нашел одно решение из плагина sudo "oh my zsh", вот код, измененный из плагина 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 будет добавлен в начало.
но это не ответ на мой вопрос.