Bagaimana cara mengaktifkan dukungan penuh warna di Vim?

98

Saya memiliki skema warna Vim yang indah ( xoria256 ) dan terlihat brilian di GVim, tetapi ketika saya menggunakan normal vimdi Terminal, skema warna hanya didukung sebagian - misalnya, warna latar belakang terong semi transparan transparan digunakan. Bagaimana cara membuat Terminal dengan setia membuat skema warna Vim saya?

David Siegel
sumber
4
Bahkan skema warna standar terlihat lebih baik dengan 256 warna. Jika bukan karena pertanyaan Anda, saya tidak akan pernah tahu. Ini harus menjadi default.
Mihai Capotă

Jawaban:

79

Terminal GNOME mendukung 256 warna, tetapi tidak mengiklankan dukungannya. Anda dapat mengesampingkan deteksi otomatis vim dengan meletakkan yang berikut:

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

di ~ / .vimrc Anda.

Catatan : jika Anda menggunakan layar GNU, ia akan dengan senang hati memakan kode 256 warna itu dan mengubahnya menjadi 16 warna dasar. Perbaikan yang lebih baik adalah mengubah TERM ke xterm-256color sebelum meluncurkan layar / vim.

Pembaruan untuk 2017 : jika Anda memiliki Vim yang cukup baru (7.4.1799 atau lebih baru), dan emulator terminal yang cukup canggih (xterm, atau terminal gnome berdasarkan pada versi VTE yang cukup baru), Anda dapat :set termguicolorsdan terminal vim akan menggunakan penuh 24-bit warna seperti yang didefinisikan oleh tema vim Anda menggunakan highlight guifg=#rrggbb guibg=#rrggbb.

Marius Gedminas
sumber
1
Ini tidak berhasil, terminal saya masih terong!
David Siegel
Apa yang bisa saya katakan - itu bekerja untuk saya ketika saya melakukannya :set t_Co=256 | colorscheme xoria256.
Marius Gedminas
1
Anda bisa menguji keberadaan terminal gnome di vimrc Anda, lalu atur variabel t_Co dengan tepat. misal: if $COLORTERM == 'gnome-terminal'`set t_Co = 256` endif (Saya tidak yakin bagaimana cara menambahkan blok kode multi-line dalam komentar, jadi tambahkan baris baru sebelum dan sesudah pernyataan yang ditetapkan)
Matt
3
Lebih baik menggunakan gnome-256color untuk gnome-terminal dan screen-256color untuk layar.
graywh
3
@trusktr google up ekstensi CSApprox dan CSExact google up.
Marius Gedminas
44

Solusi yang lebih umum adalah menginstal istilah tipe "xterm-256color". Dalam 10,04 saya pikir itu diinstal secara default. Sebelumnya Anda harus menginstal "ncurses-term" untuk mendapatkannya.

Kemudian setel jenis istilah dalam .bashrc dengan sesuatu seperti berikut ini:

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

Jika Anda lebih suka hanya memiliki 256 warna kemampuan untuk program tertentu (mungkin itu membingungkan beberapa orang lain) gunakan sebagai gantinya:

TERM=xterm-256color myprogram

dan mungkin mengaturnya sebagai alias untuk program.

Kemudian periksa kemampuan warna terminal Anda dengan:

$ tput colors
256

Anda mungkin masih memerlukan pengaturan vim di atas agar vim mengenalinya. Sebagian besar aplikasi akan mengenali 256 warna secara otomatis (jika mereka dapat menggunakannya).

Emacs juga memiliki tema warna yang jauh lebih baik dengan 256 warna. Untuk memeriksa apakah 256-warna mampu berjalan:

M-x list-colors-display

256colors.pl adalah skrip Perl yang akan menampilkan semua warna di terminal Anda.

Dave Jennings
sumber
1
Sebenarnya, gnome-256color lebih tepat untuk terminal gnome.
graywh
apakah ini akan bekerja di zsh, saya tidak menggunakan bash?
Vinit Kumar
2
Dave, saya tidak 100% yakin apakah itu benar tapi di sini adalah versi oneliner perintah Anda: [[ -n "$DISPLAY" && "$TERM" = "xterm" ]] && export TERM=xterm-256color. Harap verifikasi dan jangan ragu untuk menambahkannya ke pos.
JJD
@JJD Harus bekerja, tetapi Anda selalu dapat menggunakan ;untuk membuat semuanya menjadi satu baris.
Martin Ueding
1
@ dave-jennings Tautan ke skrip rusak.
Martin Ueding
36

Cukup sertakan baris di bawah ini ke dalam Anda $HOME/.bashrc(sebaiknya di baris terakhir file):

export TERM="xterm-256color"

Dan simpan itu. Setelah itu, restart terminal gnome Anda. Perubahan ini akan tersedia tidak hanya dalam vim, tetapi untuk semua aplikasi terminal Anda.

Untuk memeriksa apakah itu berfungsi, jalankan skrip kecil ini :

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

Setelah itu, Anda akan melihat sesuatu seperti berikut (tergantung pada tema terminal gnome Anda):

terminal

crncosta
sumber
2
Saya bertanya-tanya mengapa membuat skrip dengan Python jika hanya berisi perintah shell. Ada loop, whiles, ifs, dan fungsi di Bash, Anda tahu;)
MestreLion
1

Nah, Anda selalu dapat mengkonfigurasi Gvim agar terlihat seperti Vim. Anda hanya perlu membuat file ~ / .gvimrc dan rekatkan di dalamnya trik penyesuaian ini:

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

Saya tidak berpikir ini menyelesaikan masalah Anda, tetapi siapa yang tahu ;-)

wassimans
sumber
0

Saya membuat profil terpisah untuk Vim yang menggunakan warna solid dan buram di latar belakang. Saya hanya secara manual beralih ke itu setiap kali saya menggunakan Vim. Tidak yakin apakah ada metode yang lebih baik. Saya ingin berpikir begitu.

DLH
sumber
2
Anda dapat menggunakan if has("gui_running")vimrc Anda untuk mengatur opsi spesifik gui.
Matt