6

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.

3
  • add some screenshot and your zshrc Commented May 28, 2018 at 10:08
  • 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. Commented May 30, 2018 at 21:39
  • Oh, sorry and thank you who fixed it for me.
    – 3N4N
    Commented May 31, 2018 at 4:30

1 Answer 1

11

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.

3
  • 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?
    – 3N4N
    Commented May 31, 2018 at 4:34
  • 2
    @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. Commented May 31, 2018 at 6:00
  • The first command works for me with oh-my-zsh, fwiw. Commented Jun 7, 2022 at 13:51

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .