1

我正在使用 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 转义序列将完成:$'\033'\[0m$'\033'\[1m$'\033'\[33mhigh_wright$'\033'\[0m

有没有办法避免这种情况并仅过滤那些转义序列以完成?

编辑

我在 .oh-my-zsh 目录中为 docker 插件找到了这个文件: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("$1")"$2"("$3")]"}'))
    if [[  'X$cont_cmd' != 'X' ]]
        _describe 'containers' cont_cmd
}
4

1 回答 1

0

我可以通过更改安装在.oh-my-zsh/plugins/docker/_docker. 为了解决这个问题,我在所有辅助函数之前都使用了command这样的:

__docker_containers() {
    declare -a cont_cmd
    cont_cmd=($(command docker ps | awk 'NR>1{print $NF":[CON("$1")"$2"("$3")]"}'))
    if [[  'X$cont_cmd' != 'X' ]]
        _describe 'containers' cont_cmd
}
于 2016-06-11T12:40:32.427 回答