How do I enable full-color support in Vim?

GNOME Terminal supports 256 colors, but doesn't advertise its support. You can override vim's autodetection by putting the following:

if $COLORTERM == 'gnome-terminal'
  set t_Co=256
endif

in your ~/.vimrc.

Note: if you use GNU screen, it will happily eat those 256-color codes and convert them to basic 16 colors. A better fix is to change TERM to xterm-256color before launching screen/vim.

Update for 2017: if you have a sufficiently recent Vim (7.4.1799 or newer), and a sufficiently advanced terminal emulator (xterm, or gnome-terminal based on a sufficiently recent version of VTE), you can :set termguicolors and terminal vim will use full 24-bit colors as defined by your vim theme using highlight guifg=#rrggbb guibg=#rrggbb.


A more general solution is to install the term type "xterm-256color". In 10.04 I think it's installed by default. Previously you needed to install "ncurses-term" to get it.

Then set the term type in .bashrc with something like the following:

if [ -n "$DISPLAY" -a "$TERM" == "xterm" ]; then
    export TERM=xterm-256color
fi

If you'd prefer to only have the 256 colour capability for certain programs (perhaps it confuses some others) use instead:

TERM=xterm-256color myprogram

and perhaps set that as an alias for the program.

Then check your terminal colour capabilities with:

$ tput colors
256

You still may need the vim setting above to have vim recognise it. Most applications will recognise the 256 colours automatically (if they can use them).

Emacs also has colour themes that are much better with 256 colours. To check if it 256-colour capable run:

M-x list-colors-display

256colors.pl is Perl script that will display all the colours in your terminal.


Just include the line below into your $HOME/.bashrc (preferably in the last line of the file):

export TERM="xterm-256color"

And save it. After, restart your gnome-terminal. This change will be available not only in vim, but for all your terminal applications.

To check if it works, run this little script:

#!/usr/bin/env python
# Copyright (C) 2006 by Johannes Zellner, <[email protected]>
# modified by [email protected] to fit my output needs
# modified by [email protected] to fit my output needs

import sys
import os

def echo(msg):
    os.system('echo -n "' + str(msg) + '"')

def out(n):
    os.system("tput setab " + str(n) + "; echo -n " + ("\"% 4d\"" % n))
    os.system("tput setab 0")

# normal colors 1 - 16
os.system("tput setaf 16")
for n in range(8):
    out(n)
echo("\n")
for n in range(8, 16):
    out(n)

echo("\n")
echo("\n")

y=16
while y < 231:
    for z in range(0,6):
        out(y)
        y += 1

    echo("\n")


echo("\n")

for n in range(232, 256):
    out(n)
    if n == 237 or n == 243 or n == 249:
        echo("\n")

echo("\n")
os.system("tput setaf 7")
os.system("tput setab 0")

Thereafter, you will see something like the following (depends on your gnome-terminal theme):

terminal