두 번째 명령이나 별칭 이후에 Zsh가 완료되었습니까?

두 번째 명령이나 별칭 이후에 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가 시작 부분에 추가됩니다.

그러나 이것은 내 질문에 대한 대답이 아닙니다.

관련 정보