Remove colors from zsh tab-completion

5,086

With pure zsh:

zstyle ':completion:*' list-colors

Conversely, to use the same colors as the ls command:

eval "$(dircolors)"
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}

This should work even with oh-my-zsh, but oh-my-zsh sometimes has its own way of doing things and I haven't tested with oh-my-zsh.

Share:
5,086

Related videos on Youtube

kadekai
Author by

kadekai

Updated on September 18, 2022

Comments

  • kadekai
    kadekai over 1 year

    I don't want to see colors in the suggestions of zsh tab-completion. They make the reading harder for me. How can I do that?

    Here is my .zshrc:

    #           _
    #   _______| |__
    #  |_  / __|  _ \
    #   / /\__ \ | | |
    #  /___|___/_| |_|
    #
    
    # install oh-my-zsh
    [ ! -d ~/.oh-my-zsh ] && git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
    # install zsh-autosuggestion
    autosuggestions="/home/enan/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh"
    [ ! -f "$autosuggestions" ] && git clone https://github.com/zsh-users/zsh-autosuggestions $HOME/.zsh/zsh-autosuggestions
    [ -f "$autosuggestions" ] && source "/home/enan/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh"
    
    # oh-my-zsh config
    export ZSH=/home/enan/.oh-my-zsh
    ZSH_THEME=""
    DISABLE_LS_COLORS="true"
    DISABLE_AUTO_TITLE="true"
    export UPDATE_ZSH_DAYS=13
    source $ZSH/oh-my-zsh.sh
    plugins=( git )
    
    bindkey '^P' up-line-or-beginning-search
    bindkey '^N' down-line-or-beginning-search
    
    # Personal customization
    BASE16_SHELL=$HOME/.config/base16-shell/
    [ -n "$PS1" ] && [ -s $BASE16_SHELL/profile_helper.sh ] && eval "$($BASE16_SHELL/profile_helper.sh)"
    
    executables="/home/enan/Executables/bin"
    [ -d "$executables" ] && [[ ":$PATH:" != *$executables* ]] && export PATH=$executables:${PATH}
    
    # FZF settings
    [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
    export FZF_DEFAULT_OPTS='--height 100% '
    
    alias ls='ls -CF --color=none'
    alias ll='ls -AlF'
    alias la='ls -AF'
    alias refresh='source ~/.zshrc'
    alias screenfetch='screenfetch -t'
    alias i3lock='sh ~/Git-repos/dotFiles/lock.sh'
    alias emacs='emacs -nw'
    alias v='nvim'
    alias py2=python2
    alias py3=python3
    alias t='sh ~/Git-repos/dotFiles/tmux.sh'
    
    # zsh prompt with git info
    git_branch() {
      git branch --no-color 2>/dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ \1/'
    }
    
    git_status() {
      # + changes are staged and ready to commit
      # ! unstaged changes are present
      # ? untracked files are present
      # $ changes have been stashed
      # ↑ local commits need to be pushed to the remote
      local state="$(git status --porcelain 2>/dev/null)"
      local output='['
      [[ -n $(egrep '^[MADRC]' <<<"$state") ]] && output="$output+"
      [[ -n $(egrep '^.[MD]' <<<"$state") ]] && output="$output!"
      [[ -n $(egrep '^\?\?' <<<"$state") ]] && output="$output?"
      [[ -n $(git stash list) ]] && output="$output$"
      [[ -n $(git log --branches --not --remotes) ]] && output="$output↑"
      [[ -n $output ]] && output="$output]"
      echo $output
    }
    
    git_prompt() {
      # First, get the branch name...
      local branch=$(git_branch)
      # Empty output? Then we're not in a Git repository, so bypass the rest
      # of the function, producing no output
      if [[ -n $branch ]]; then
        local state=$(git_status)
        # Now output the actual code to insert the branch and status
        if [ $state = '[]' ]; then
          echo -e " $branch"
        else
        echo -e " $branch %{$fg_bold[red]%}$state"
        fi
      fi
    }
    
    PROMPT='%{$fg[blue]%}[%n@%m] %{$fg[magenta]%}%c%{$fg[yellow]%}$(git_prompt)
    %(?:%{$fg[green]%}❯ :%{$fg[red]%}❯ )%{$reset_color%}'
    

    and a screenshot:

    screenshot

    Look at the left pane last command cd <tab> of the terminal in the screenshot.

    • Arpit Agarwal
      Arpit Agarwal almost 6 years
      add some screenshot and your zshrc
    • Gilles 'SO- stop being evil'
      Gilles 'SO- stop being evil' almost 6 years
      Don't post links to external sites. Put the code directly in your question (use the {} button) and insert the image inline (use the button to the right of the {} button), like I did for you.
    • kadekai
      kadekai almost 6 years
      Oh, sorry and thank you who fixed it for me.
  • kadekai
    kadekai almost 6 years
    Thanks, your first suggestion worked exactly how I wanted. But I didn't understand your second suggestion, and it didn't work. I don't have any LS_COLORS variables in my .zshrc, as you can see. Could you edit your answer and explain a bit?
  • Gilles 'SO- stop being evil'
    Gilles 'SO- stop being evil' almost 6 years
    @EnanAjmain dircolors prints some output that contains LS_COLORS=…. I see in your screenshot that you don't color the ls output, so you wouldn't want to call dircolors, but I'll leave that in my answer because it would help others who don't like the colors they're getting in zsh but do like the ones they're getting from ls.
  • Admin
    Admin almost 2 years
    The first command works for me with oh-my-zsh, fwiw.