23

I have a new MacBookPro, and I installed the latest release of iTerm2.

Even after I imported various color schemes, I notice that they just change the color of the text and background only.

What I was expecting to see were different colors for files VS directories, VS hidden files, etc etc. How do I do that on iTerm2?

A related question is how do I actually specify what I want the colors of directories, files, etc to be?

Thanks

23

You have to do two things:

  • set the LSCOLORS environment variable
  • create an alias for ls so that it shows colors by default

In your ~/.bash_profile add the following:

export LSCOLORS="EHfxcxdxBxegecabagacad" 

alias ls='ls -lGH'        <-----This shows in list format, follow symlinks colorized

The the colors are set by each bit above; the first being foreground and the second being background. The first two characters refer to directories having a bold blue foreground and a light grey background.

However, there's a great online utility to see what each of the colors mean and look like in real time. It will even generate the "code" for you. (I am not affiliated with this at all). It will work in both MacOS/FreeBSD and Linux. Make sure you select the BSD option for macOS.

LSCOLORS Calculator


The order of the attributes are as follows:


1.   directory
2.   symbolic link
3.   socket
4.   pipe
5.   executable
6.   block special
7.   character special
8.   executable with setuid bit set
9.   executable with setgid bit set
10.   directory writable to others, with sticky bit
11.   directory writable to others, without sticky

The color designators are as follows:

a    black
b    red
c    green
d    brown
e    blue
f    magenta
g    cyan
h    light grey
A    bold black, usually shows up as dark grey
B    bold red
C    bold green
D    bold brown, usually shows up as yellow
E    bold blue
F    bold magenta
G    bold cyan
H    bold light grey; looks like bright white
x    default foreground or background
  • Hi Allan, thanks! A couple questions, can you explain some more about i) Why I have to put it in .bash_profile and not say, the .zshrc I think it was, and ii) a little bit more about the export LSCOLORS part? Do I go to that site you mentioned and set my color scheme from there? How does this jive then with the color schemes of iterm2? Thanks! – Spacey Apr 28 '17 at 16:38
  • Perhaps this is what is confusing me: I am using iterm2. What does this mean for which file we change? (.bash_profile VS .zshrc)? For what it's worth, on this new machine I currently have neither... – Spacey Apr 28 '17 at 16:45
  • Ah, ok, the echo shows bash. So I should make a new ~/.bash_profile I am guessing since none exists. – Spacey Apr 28 '17 at 16:49
4

An alternative to LSCOLORS is GRC (the GeneRic Colouriser), which can be used with pretty much any command-line app, not just ls.

If you've got Homebrew installed, install grc with brew install grc - this will set up aliases automatically, including for ls. It comes with aliases and config files for many different commands, and it's (relatively) trivial to hack a config file using Python regular expressions for any command that grc doesn't currently cover (tmutil and launchctl, for example).

(I was going to add this to the question I flagged as a possible dupe, but with your edit it's probably more useful here!)

  • I installed grc and ls was not colorized at all. 'type ls' gives '/bin/ls', nothing aliased. Back to the bash profile solution I guess. – 6005 Jul 11 at 16:06
  • @6005, did you install GRC with brew? (And did it install successfully, with no errors?) What does brew doctor report - any problems? What shell are you using, and have you modified the shell's config at all?You may need to edit your .bash_profile (or config for whatever shell you use) to source the GRC aliases. My .bash_profile has this (though I added it myself - my bash config is pretty esoteric...): [ -f /usr/local/etc/grc.bashrc ] && . /usr/local/etc/grc.bashrc – John N Jul 12 at 17:22
3

Open bash_profile using command:

open ~/.bash_profile

and add the following lines:

export PS1="\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "
export CLICOLOR=1
export LSCOLORS=ExFxBxDxCxegedabagacad
alias ls='ls -GFh'

then source bash_profile using:

source ~/.bash_profile
  • KayV what does this do exactly? Can you expand please? – TheGrapeBeyond May 29 at 15:30

You must log in to answer this question.

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