Автодополнение Zsh по второй команде или после псевдонима?

Автодополнение Zsh по второй команде или после псевдонима?

Я изменил оболочку 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 будет добавлен в начало.

но это не ответ на мой вопрос.

Связанный контент