使用 bash 函数 + grc 像别名一样会破坏 Zsh 补全
Using bash function + grc like an alias breaks Zsh completion
我正在使用 grc / grcat 通过此功能为我的终端输出着色:
function docker() {
case $* in
ps* ) shift 1; command docker ps "$@" | grcat $HOME/.grc/conf.dockerps ;;
images* ) shift 1; command docker images "$@" | grcat $HOME/.grc/conf.dockerimages ;;
info* ) shift 1; command docker info "$@" | grcat $HOME/.grc/conf.dockerinfo ;;
* ) command docker "$@" ;;
esac
}
但这破坏了我在 .zshrc 中使用 oh-my-zsh 设置的 zsh 完成和插件:
plugins=(git colored-man-pages colorize vagrant brew ruby docker)
plugins+=(gradle rvm rails bundler gem osx pod)
plugins+=(bower cp go node npm)
plugins+=(zsh-syntax-highlighting encode64)
plugins+=(zsh-completions mvn)
fpath=(~/.zsh/completion $fpath)
autoload -Uz compinit && compinit -i
例如,当我尝试使用 docker stop
时,完成时带有 ANSI 转义序列:$'3'\[0m$'3'\[1m$'3'\[33mhigh_wright$'3'\[0m
有没有办法避免这种情况并仅为完成过滤那些转义序列?
编辑
我在 docker 插件的 .oh-my-zsh 目录中找到了这个文件:https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/docker/_docker
我知道我需要更改此功能,但我不知道如何更改。
__docker_containers() {
declare -a cont_cmd
cont_cmd=($(docker ps | awk 'NR>1{print $NF":[CON("")""("")]"}'))
if [[ 'X$cont_cmd' != 'X' ]]
_describe 'containers' cont_cmd
}
我可以通过更改 .oh-my-zsh/plugins/docker/_docker
中安装的 oh-my-zsh 的 docker 插件来解决这个问题。为了修复它,我在所有辅助函数之前加上 command
,如下所示:
__docker_containers() {
declare -a cont_cmd
cont_cmd=($(command docker ps | awk 'NR>1{print $NF":[CON("")""("")]"}'))
if [[ 'X$cont_cmd' != 'X' ]]
_describe 'containers' cont_cmd
}
我正在使用 grc / grcat 通过此功能为我的终端输出着色:
function docker() {
case $* in
ps* ) shift 1; command docker ps "$@" | grcat $HOME/.grc/conf.dockerps ;;
images* ) shift 1; command docker images "$@" | grcat $HOME/.grc/conf.dockerimages ;;
info* ) shift 1; command docker info "$@" | grcat $HOME/.grc/conf.dockerinfo ;;
* ) command docker "$@" ;;
esac
}
但这破坏了我在 .zshrc 中使用 oh-my-zsh 设置的 zsh 完成和插件:
plugins=(git colored-man-pages colorize vagrant brew ruby docker)
plugins+=(gradle rvm rails bundler gem osx pod)
plugins+=(bower cp go node npm)
plugins+=(zsh-syntax-highlighting encode64)
plugins+=(zsh-completions mvn)
fpath=(~/.zsh/completion $fpath)
autoload -Uz compinit && compinit -i
例如,当我尝试使用 docker stop
时,完成时带有 ANSI 转义序列:$'3'\[0m$'3'\[1m$'3'\[33mhigh_wright$'3'\[0m
有没有办法避免这种情况并仅为完成过滤那些转义序列?
编辑
我在 docker 插件的 .oh-my-zsh 目录中找到了这个文件:https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/docker/_docker
我知道我需要更改此功能,但我不知道如何更改。
__docker_containers() {
declare -a cont_cmd
cont_cmd=($(docker ps | awk 'NR>1{print $NF":[CON("")""("")]"}'))
if [[ 'X$cont_cmd' != 'X' ]]
_describe 'containers' cont_cmd
}
我可以通过更改 .oh-my-zsh/plugins/docker/_docker
中安装的 oh-my-zsh 的 docker 插件来解决这个问题。为了修复它,我在所有辅助函数之前加上 command
,如下所示:
__docker_containers() {
declare -a cont_cmd
cont_cmd=($(command docker ps | awk 'NR>1{print $NF":[CON("")""("")]"}'))
if [[ 'X$cont_cmd' != 'X' ]]
_describe 'containers' cont_cmd
}