Come posso abilitare il supporto a colori in Vim?


98

Ho un adorabile colorito di Vim ( xoria256 ) e ha un aspetto brillante in GVim, ma quando uso il normale vimin Terminale, il colorcheme è supportato solo parzialmente - ad esempio, viene utilizzato il colore di sfondo di melanzana semitrasparente predefinito. Come posso fare in modo che Terminal renda fedelmente il mio sistema di colori Vim?


4
Anche la combinazione di colori predefinita ha un aspetto migliore con 256 colori. Se non fosse stato per la tua domanda, non l'avrei mai scoperto. Questo dovrebbe essere il valore predefinito.
Mihai Capota

Risposte:


79

Il Terminale GNOME supporta 256 colori, ma non pubblicizza il suo supporto. È possibile ignorare il rilevamento automatico di Vim mettendo quanto segue:

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

nel tuo ~ / .vimrc.

Nota : se usi lo schermo GNU, mangerà felicemente quei codici a 256 colori e li convertirà in 16 colori di base. Una soluzione migliore è cambiare TERM in xterm-256color prima di avviare screen / vim.

Aggiornamento per il 2017 : se si dispone di un Vim sufficientemente recente (7.4.1799 o più recente) e di un emulatore di terminale sufficientemente avanzato (xterm o gnome-terminal basato su una versione sufficientemente recente di VTE), è possibile :set termguicolorse terminal vim utilizzerà Colori a 24 bit come definiti dal tema VIM utilizzando highlight guifg=#rrggbb guibg=#rrggbb.


1
Non ha funzionato, il mio terminale è ancora melanzana!
David Siegel,

Cosa posso dire - funziona per me quando lo faccio :set t_Co=256 | colorscheme xoria256.
Marius Gedminas,

1
Potresti verificare la presenza di gnome-terminal nel tuo vimrc, quindi impostare la variabile t_Co in modo appropriato. ad esempio: if $COLORTERM == 'gnome-terminal'`set t_Co = 256` endif (non sono sicuro di come aggiungere blocchi di codice a più righe nei commenti, quindi aggiungi nuove righe prima e dopo l'istruzione set)
Matt

3
Meglio usare gnome-256color per gnome-terminal e screen-256color per lo schermo.
graywh

3
@trusktr google up CSApprox e CSExact estensioni vim.
Marius Gedminas,

44

Una soluzione più generale è installare il termine "xterm-256color". In 10.04 penso che sia installato di default. In precedenza era necessario installare "ncurses-term" per ottenerlo.

Quindi impostare il termine digitare in .bashrc con qualcosa di simile al seguente:

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

Se preferisci avere la capacità di 256 colori solo per alcuni programmi (forse confonde alcuni altri) usa invece:

TERM=xterm-256color myprogram

e forse impostarlo come alias per il programma.

Quindi controlla le funzionalità del colore del tuo terminale con:

$ tput colors
256

Potresti aver ancora bisogno dell'impostazione di vim sopra per far sì che vim lo riconosca. La maggior parte delle applicazioni riconoscerà automaticamente i 256 colori (se possono usarli).

Emacs ha anche temi di colore che sono molto meglio con 256 colori. Per verificare se è in grado di eseguire 256 colori:

M-x list-colors-display

256colors.pl è lo script Perl che mostrerà tutti i colori nel tuo terminale.


1
In realtà, gnome-256color è più corretto per gnome-terminal.
graywh

funzionerà in zsh, non uso bash?
Vinit Kumar,

2
Dave, io non sono sicuro al 100% se è corretto, ma qui è una versione oneliner del comando: [[ -n "$DISPLAY" && "$TERM" = "xterm" ]] && export TERM=xterm-256color. Verifica e sentiti libero di aggiungerlo al post.
JJD

@JJD Dovrebbe funzionare, ma puoi sempre usarlo ;per trasformare tutto in una riga .
Martin Ueding,

1
@ dave-jennings Il collegamento allo script è interrotto.
Martin Ueding,

36

Includi la riga seguente nel tuo $HOME/.bashrc(preferibilmente nell'ultima riga del file):

export TERM="xterm-256color"

E salvalo. Dopo, riavvia il tuo terminale gnome. Questa modifica sarà disponibile non solo in vim, ma per tutte le applicazioni del terminale.

Per verificare se funziona, esegui questo piccolo script :

#!/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")

Successivamente, vedrai qualcosa di simile al seguente (dipende dal tema di gnome-terminal):

terminale


2
Mi chiedo perché creare lo script in Python se contiene solo comandi shell. Ci sono loop, whiles, ifs e funzioni in Bash, sai;)
MestreLion

1

Bene, puoi sempre configurare Gvim per farlo sembrare Vim. Devi solo creare un file ~ / .gvimrc e incollarlo in questi trucchi di personalizzazione:

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

Non penso che questo risolva il tuo problema, ma chissà ;-)


0

Ho creato un profilo separato per Vim che utilizza un colore solido e opaco sullo sfondo. Passo solo manualmente ad esso ogni volta che uso Vim. Non sono sicuro che esista o meno un metodo migliore. Mi piacerebbe pensarlo.


2
Puoi usare if has("gui_running")nel tuo vimrc per impostare opzioni specifiche della gui.
Matt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.