Как включить полноцветную поддержку в Vim?

98

У меня есть прекрасная цветовая схема Vim ( xoria256 ), и она выглядит великолепно в GVim, но когда я использую Normal vimв Terminal, цветовая схема поддерживается только частично - например, используется полупрозрачный цвет фона баклажан по умолчанию. Как сделать так, чтобы Terminal добросовестно отображал мою цветовую схему Vim?

Дэвид Сигел
источник
4
Даже стандартная цветовая схема выглядит лучше с 256 цветами. Если бы не ваш вопрос, я бы никогда этого не узнал. Это должно быть по умолчанию.
Михай Капотэ

Ответы:

79

GNOME Terminal поддерживает 256 цветов, но не объявляет о своей поддержке. Вы можете переопределить автоопределение vim, поставив следующее:

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

в вашем ~ / .vimrc.

Примечание : если вы используете экран GNU, он с удовольствием съест эти 256-цветовые коды и преобразует их в основные 16 цветов. Лучшим решением будет изменить TERM на xterm-256color перед запуском screen / vim.

Обновление для 2017 : если у вас достаточно недавний Vim (7.4.1799 или новее) и достаточно продвинутый эмулятор терминала (xterm или gnome-терминал на основе достаточно недавней версии VTE), вы можете :set termguicolorsи терминал vim будет использовать полный 24-битные цвета в соответствии с вашей темой vim highlight guifg=#rrggbb guibg=#rrggbb.

Мариус Гедминас
источник
1
Это не сработало, мой терминал все еще баклажан!
Дэвид Сигел
Что я могу сказать - это работает для меня, когда я делаю :set t_Co=256 | colorscheme xoria256.
Мариус Гедминас
1
Вы можете проверить наличие gnome-терминала в вашем vimrc, а затем установить переменную t_Co соответствующим образом. например: if $COLORTERM == 'gnome-terminal'`set t_Co = 256` endif (я не уверен, как добавить многострочные блоки кода в комментарии, поэтому добавляйте новые строки до и после оператора set)
Мэтт
3
Лучше использовать gnome-256color для терминала gnome и screen-256color для экрана.
серый
3
@trusktr Google Расширения vim CSApprox и CSExact.
Мариус Гедминас
44

Более общее решение - установить термин «xterm-256color». В 10.04 я думаю он установлен по умолчанию. Ранее вам нужно было установить «ncurses-term», чтобы получить его.

Затем установите термин type в .bashrc примерно так:

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

Если вы предпочитаете использовать только 256 цветов для определенных программ (возможно, это смущает некоторые другие), используйте:

TERM=xterm-256color myprogram

и, возможно, установить это как псевдоним для программы.

Затем проверьте цветовые возможности вашего терминала с помощью:

$ tput colors
256

Вам все еще может понадобиться настройка vim выше, чтобы vim распознал ее. Большинство приложений распознают 256 цветов автоматически (если они могут их использовать).

Emacs также имеет цветовые темы, которые намного лучше с 256 цветами. Чтобы проверить, работает ли он с 256 цветами:

M-x list-colors-display

256colors.pl - это Perl-скрипт, который будет отображать все цвета в вашем терминале.

Дейв Дженнингс
источник
1
На самом деле, gnome-256color более корректен для gnome-терминала.
серый
это будет работать в Zsh, я не использую Bash?
Винит Кумар
2
Дейв, я не 100% уверен, что это правильно , но вот версия Oneliner вашей команды: [[ -n "$DISPLAY" && "$TERM" = "xterm" ]] && export TERM=xterm-256color. Пожалуйста, подтвердите и не стесняйтесь добавлять его к сообщению.
JJD
@JJD Должно работать, но вы всегда можете использовать, ;чтобы сделать что-либо одним вкладышем.
Мартин Уедин
1
@ dave-jennings Ссылка на скрипт не работает.
Мартин Уединг
36

Просто включите строку ниже в ваш $HOME/.bashrc(предпочтительно в последнюю строку файла):

export TERM="xterm-256color"

И сохрани это. После перезапустите свой терминал gnome. Это изменение будет доступно не только в vim, но и для всех ваших терминальных приложений.

Чтобы проверить, работает ли он, запустите этот маленький скрипт :

#!/usr/bin/env python
# Copyright (C) 2006 by Johannes Zellner, <johannes@zellner.org>
# modified by mac@calmar.ws to fit my output needs
# modified by crncosta@carloscosta.org 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")

После этого вы увидите что-то вроде следующего (зависит от вашей темы gnome-терминала):

Терминал

crncosta
источник
2
Интересно, зачем делать скрипт на Python, если он содержит только команды оболочки. Вы знаете, что в Bash есть циклы, whiles, ifs и функции;)
MestreLion
1

Ну, вы всегда можете настроить Gvim так, чтобы он выглядел как Vim. Вам просто нужно создать файл ~ / .gvimrc и вставить в него следующие приемы настройки:

set guioptions-=r  " no scrollbar on the right
set guioptions-=l  " no scrollbar on the left
set guioptions-=m  " no menu
set guioptions-=T  " no toolbar

Я не думаю, что это решит вашу проблему, но кто знает ;-)

wassimans
источник
0

Я сделал отдельный профиль для Vim, который использует сплошной непрозрачный цвет фона. Я просто вручную переключаюсь на него всякий раз, когда использую Vim. Не уверен, есть ли лучший метод. Я хотел бы так думать.

DLH
источник
2
Вы можете использовать if has("gui_running")в вашем vimrc для установки определенных параметров графического интерфейса.
Мэтт