ฉันจะเปิดใช้งานการสนับสนุน full-color ใน Vim ได้อย่างไร?


98

ฉันมี colorcheme Vim ที่น่ารัก ( xoria256 ) และมันดูยอดเยี่ยมใน GVim แต่เมื่อฉันใช้งานปกติvimใน Terminal, colorcheme ได้รับการสนับสนุนเพียงบางส่วนเท่านั้น - ตัวอย่างเช่นใช้สีพื้นหลังแบบกึ่งโปร่งใสกึ่งโปร่งใส ฉันจะทำให้เทอร์มินัลแสดงสี 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

อัปเดตสำหรับปี 2560 : หากคุณมี Vim ล่าสุดเพียงพอ (7.4.1799 หรือใหม่กว่า) และเทอร์มินัลอีมูเลเตอร์ขั้นสูง (xterm หรือ gnome-terminal ที่อ้างอิง VTE รุ่นล่าสุดอย่างเพียงพอ) คุณสามารถ:set termguicolorsและ terminal vim จะใช้งานเต็ม สี 24 highlight guifg=#rrggbb guibg=#rrggbbบิตตามที่กำหนดโดยธีมที่เป็นกลุ่มของคุณโดยใช้


1
นี่มันใช้งานไม่ได้เทอร์มินัลของฉันยังคงเป็นศูนย์อยู่!
David Siegel

สิ่งที่ฉันสามารถพูดได้ - :set t_Co=256 | colorscheme xoria256ทำงานสำหรับฉันเมื่อฉันทำ
Marius Gedminas

1
คุณสามารถทดสอบการมีอยู่ของ gnome-terminal ใน vimrc ของคุณจากนั้นตั้งค่าตัวแปร t_Co อย่างเหมาะสม เช่น: if $COLORTERM == 'gnome-terminal'`ตั้ง t_Co = 256` endif (ผมไม่แน่ใจว่าวิธีการเพิ่มบล็อกหลายบรรทัดของรหัสในความคิดเห็นเพื่อเพิ่มบรรทัดใหม่ก่อนและหลังคำสั่งชุด)
แมตต์

3
ดีกว่าที่จะใช้ gnome-256color สำหรับ gnome-terminal และ screen-256color สำหรับหน้าจอ
graywh

3
@trusktr google up CSApprox และ CSExact vim extension
Marius Gedminas

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
graywh

มันจะทำงานใน zsh ฉันไม่ได้ใช้ทุบตี?
Vinit Kumar

2
เดฟผมไม่แน่ใจ 100% ถ้ามันถูกต้อง แต่ที่นี่เป็นรุ่น oneliner[[ -n "$DISPLAY" && "$TERM" = "xterm" ]] && export TERM=xterm-256colorของคำสั่งของคุณ: โปรดยืนยันและเพิ่มลงในโพสต์
JJD

@JJD ควรทำงาน แต่คุณสามารถใช้;เพื่อทำให้ทุกอย่างเป็นหนึ่งเดียวได้เสมอ
Martin Ueding

1
@ dave-jennings ลิงก์ไปยังสคริปต์ใช้งานไม่ได้
Martin Ueding

36

เพียงรวมบรรทัดด้านล่างลงในของคุณ$HOME/.bashrc(โดยเฉพาะอย่างยิ่งในบรรทัดสุดท้ายของไฟล์):

export TERM="xterm-256color"

และบันทึกไว้ หลังจากรีสตาร์ท gnome-terminal ของคุณ การเปลี่ยนแปลงนี้จะมีให้ในรูปแบบเฉพาะ แต่สำหรับแอปพลิเคชันเทอร์มินัลทั้งหมดของคุณ

หากต้องการตรวจสอบว่าใช้งานได้หรือไม่ให้เรียกใช้สคริปต์เล็กน้อยนี้:

#!/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
แมตต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.