
OS X Yosemite 셸을 Zsh로 변경하고 "oh my zsh" 플러그인으로 구성했습니다. 최근 프록시 명령줄 도구에 Proxychains-ng를 설치했지만 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는 완료를 수행하기 전에 별칭을 확장합니다. 귀하의 구성이 이를 비활성화할 수도 있습니다. 설정을 해제하여 명시적으로 다시 활성화할 수 있습니다.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가 처음에 추가됩니다.
하지만 이것은 내 질문에 대한 대답이 아닙니다.