Як увімкнути повнокольорову підтримку у Vim?


98

У мене прекрасна схема кольорів Vim ( xoria256 ), і вона виглядає геніально в GVim, але коли я використовую звичайний vimтермінал, кольорова схема лише частково підтримується - наприклад, використовується напівпрозорий колір тло баклажана за замовчуванням. Як змусити Термінал вірно віддати кольорову схему Vim?


4
Навіть кольорова схема за замовчуванням виглядає краще з 256 кольорами. Якби не ваше питання, я б ніколи цього не дізнався. Це має бути за замовчуванням.
Mihai Capotă

Відповіді:


79

Термінал GNOME підтримує 256 кольорів, але не рекламує його підтримку. Ви можете змінити автоматичне виявлення vim, поставивши таке:

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

у вашому ~ / .vimrc.

Примітка : якщо ви використовуєте екран GNU, він із задоволенням з'їсть ці 256 кольорові коди та перетворить їх у основні 16 кольорів. Краще виправити - змінити TERM на xterm-256color перед запуском екрана / vim.

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


1
Це не спрацювало, мій термінал все ще є баклажаном!
Девід Сігель

Що я можу сказати - це працює для мене, коли я це роблю :set t_Co=256 | colorscheme xoria256.
Маріус Гедмінас

1
Ви можете перевірити наявність gnome-terminal у своєму vimrc, а потім встановити змінну t_Co відповідним чином. напр .: if $COLORTERM == 'gnome-terminal'`set t_Co = 256` endif (я не впевнений, як додати багаторядкові блоки коду в коментарі, тому додайте нові рядки до і після встановленого оператора)
Метт

3
Краще використовувати gnome-256color для gnome-terminal і screen-256color для екрана.
сірий

3
@trusktr google up розширення vim CSApprox та CSExact.
Маріус Гедмінас

44

Більш загальне рішення - встановити термін типу "xterm-256color". У 10.04 я думаю, що це встановлено за замовчуванням. Раніше вам потрібно було встановити "ncurses-term", щоб отримати його.

Потім встановіть тип терміна в .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-terminal.
сірий

це буде працювати в 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-terminal):

термінал


2
Цікаво, навіщо робити скрипт у Python, якщо він містить лише команди оболонки. Ви знаєте, петлі, whiles, ifs та функції у Bash, знаєте;)
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

Я не думаю, що це вирішує вашу проблему, але хто знає ;-)


0

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


2
Ви можете використовувати if has("gui_running")у своєму vimrc для встановлення конкретних параметрів gui.
Метт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.