Làm cách nào để bật hỗ trợ đầy đủ màu trong Vim?


98

Tôi có một màu Vim đáng yêu ( xoria256 ) và nó trông rất rực rỡ trong GVim, nhưng khi tôi sử dụng bình thường vimtrong Terminal, màu sắc chỉ được hỗ trợ một phần - ví dụ, màu nền cà tím bán trong suốt mặc định được sử dụng. Làm cách nào để làm cho Terminal trung thực hiển thị màu sắc Vim của tôi?


4
Ngay cả bảng màu mặc định trông cũng tốt hơn với 256 màu. Nếu đó không phải là câu hỏi của bạn, tôi sẽ không bao giờ tìm ra nó. Điều này nên được mặc định.
Mihai Capotă

Câu trả lời:


79

Thiết bị đầu cuối Gnome hỗ trợ 256 màu, nhưng không quảng cáo hỗ trợ của nó. Bạn có thể ghi đè tự động phát hiện của vim bằng cách đặt như sau:

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

trong ~ / .vimrc của bạn.

Lưu ý : nếu bạn sử dụng màn hình GNU, nó sẽ vui vẻ ăn các mã 256 màu đó và chuyển đổi chúng thành 16 màu cơ bản. Cách khắc phục tốt hơn là thay đổi TERM thành xterm-256color trước khi khởi chạy màn hình / vim.

Cập nhật cho năm 2017 : nếu bạn có Vim đủ gần đây (7.4.1799 hoặc mới hơn) và trình giả lập thiết bị đầu cuối đủ tiên tiến (xterm hoặc gnome-terminal dựa trên phiên bản VTE đủ gần đây), bạn có thể :set termguicolorsvà thiết bị đầu cuối vim sẽ sử dụng đầy đủ Màu sắc 24 bit như được xác định bởi chủ đề vim của bạn bằng cách sử dụng highlight guifg=#rrggbb guibg=#rrggbb.


1
Điều này đã không làm việc, thiết bị đầu cuối của tôi vẫn là cà tím!
David Siegel

Tôi có thể nói gì - nó hoạt động với tôi khi tôi làm :set t_Co=256 | colorscheme xoria256.
Marius Gedminas

1
Bạn có thể kiểm tra sự hiện diện của gnome-terminal trong vimrc của bạn, sau đó đặt biến t_Co một cách thích hợp. ví dụ: if $COLORTERM == 'gnome-terminal''thiết t_Co = 256` endif (Tôi không chắc chắn làm thế nào để thêm khối đa dòng mã trong ý kiến, vì vậy thêm dòng mới trước và sau khi tuyên bố thiết lập)
Matt

3
Tốt hơn nên sử dụng gnome-256color cho gnome-terminal và screen-256color cho màn hình.
Graywh

3
@trusktr google lên tiện ích mở rộng vim CSApprox và CSExact.
Marius Gedminas

44

Một giải pháp tổng quát hơn là cài đặt loại thuật ngữ "xterm-256color". Trong 10.04 tôi nghĩ rằng nó được cài đặt theo mặc định. Trước đây bạn cần cài đặt "ncurses-term" để có được nó.

Sau đó, đặt loại thuật ngữ trong .bashrc với nội dung như sau:

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

Nếu bạn chỉ muốn có khả năng 256 màu cho một số chương trình nhất định (có lẽ nó gây nhầm lẫn cho một số người khác) thì hãy sử dụng:

TERM=xterm-256color myprogram

và có lẽ đặt nó như một bí danh cho chương trình.

Sau đó kiểm tra khả năng màu thiết bị đầu cuối của bạn với:

$ tput colors
256

Bạn vẫn có thể cần cài đặt vim ở trên để vim nhận ra nó. Hầu hết các ứng dụng sẽ tự động nhận ra 256 màu (nếu chúng có thể sử dụng chúng).

Emacs cũng có chủ đề màu sắc tốt hơn nhiều với 256 màu. Để kiểm tra xem nó có khả năng chạy 256 màu không:

M-x list-colors-display

256colors.pl là tập lệnh Perl sẽ hiển thị tất cả các màu trong thiết bị đầu cuối của bạn.


1
Trên thực tế, gnome-256color đúng hơn cho gnome-terminal.
Graywh

nó sẽ hoạt động trong zsh, tôi không sử dụng bash?
Vinit Kumar

2
Dave, tôi không chắc chắn 100% nếu nó đúng nhưng đây là phiên bản oneliner của lệnh của bạn : [[ -n "$DISPLAY" && "$TERM" = "xterm" ]] && export TERM=xterm-256color. Vui lòng xác minh và cảm thấy tự do để thêm nó vào bài viết.
JJD

@JJD Nên hoạt động, nhưng bạn luôn có thể sử dụng ;để biến mọi thứ thành một lớp lót.
Martin Uting

1
@ dave-jennings Liên kết đến tập lệnh bị hỏng.
Martin Uting

36

Chỉ cần bao gồm dòng bên dưới vào của bạn $HOME/.bashrc(tốt nhất là trong dòng cuối cùng của tệp):

export TERM="xterm-256color"

Và lưu nó. Sau đó, khởi động lại thiết bị đầu cuối gnome của bạn. Thay đổi này sẽ có sẵn không chỉ trong vim, mà cho tất cả các ứng dụng đầu cuối của bạn.

Để kiểm tra xem nó có hoạt động không, hãy chạy đoạn script nhỏ này :

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

Sau đó, bạn sẽ thấy một cái gì đó như sau (phụ thuộc vào chủ đề gnome-terminal của bạn):

thiết bị đầu cuối


2
Tôi tự hỏi tại sao tạo tập lệnh trong Python nếu nó chỉ chứa các lệnh shell. Có các vòng lặp, whiles, ifs và hàm trong Bash, bạn biết đấy;)
MestreLion

1

Chà, bạn luôn có thể cấu hình Gvim để làm cho nó trông giống Vim. Bạn chỉ cần tạo tệp ~ / .gvimrc và dán vào đó các thủ thuật tùy chỉnh này:

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

Tôi không nghĩ rằng điều này giải quyết vấn đề của bạn, nhưng ai biết được ;-)


0

Tôi đã tạo một hồ sơ riêng cho Vim, sử dụng màu đục, mờ trong nền. Tôi chỉ tự chuyển sang nó bất cứ khi nào tôi sử dụng Vim. Không chắc có hay không một phương pháp tốt hơn. Tôi muốn nghĩ như vậy.


2
Bạn có thể sử dụng if has("gui_running")trong vimrc của mình để đặt các tùy chọn cụ thể cho gui.
Matt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.