我已将我的 OS X Yosemite shell 更改为 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"
Run Code Online (Sandbox Code Playgroud)
并且 zsh 也不适用于别名后的命令,
alias proxy="http_proxy=http://127.0.0.1:12345"
proxy brew[hit tab], will not come up with brew's subcommands
Run Code Online (Sandbox Code Playgroud)
命令和它的选项将没有完成。任何的想法?谢谢你。
Gil*_*il' 11
默认情况下,zsh 在完成之前扩展别名。您的配置可能会禁用此功能;您可以通过取消设置complete_aliases
选项来明确地重新启用它。
unsetopt complete_aliases
Run Code Online (Sandbox Code Playgroud)
对于像 一样的外部命令proxychains4
,您可以通过完成它来声明它的参数本身就是一个命令和它的参数_precommand
。这在文档中并不容易找到,但是您可以观察类似命令的配置,例如nohup
运行echo $_comps[nohup]
. 这是“新”完成系统(在运行之后compinit
)。
compdef _precommand proxychains4
Run Code Online (Sandbox Code Playgroud)
好吧,我从“oh my zsh”的sudo插件中找到了一种解决方案,这是从sudo插件修改的代码,我称之为proxychains-ng-plugins.zsh,将其放置到$ZSH_CUSTOM/plugins/proxychain-ng/,并将其加载到 ~/.zshrc,plugins=(),然后 source ~/.zshrc :
# ------------------------------------------------------------------------------
# Description
# -----------
#
# sudo will be inserted before the command
#
# ------------------------------------------------------------------------------
# Authors
# -------
#
# * Dongweiming <ciici123@gmail.com>
#
# ------------------------------------------------------------------------------
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
Run Code Online (Sandbox Code Playgroud)
所以先输入一个命令,然后按ESC+CTRL,proxychains4将被附加在开头。
但这不是我问题的答案。
归档时间: |
|
查看次数: |
2246 次 |
最近记录: |