Jak sprawić, aby VIM wyświetlał poprawnie 256 kolorów

17

Próbuję uzyskać 256 plików motywów kolorów do pracy z VIM pod xterm.

Oto jak wygląda dla mnie morze :

wprowadź opis zdjęcia tutaj

Jak powinno to wyglądać: jak to powinno wyglądać

Próbowałem postępować zgodnie ze wskazówkami na stronie wiki, ale bezskutecznie.

set t_Co=256 działa dobrze, ale

set t_AB=^[[48;5;%dm
set t_AF=^[[38;5;%dm

powoduje wyświetlenie sekwencji ucieczki na terminalu:

EDYCJA: Mikel miał rację, musiałem wpisać Ctrl + v + Esc, aby wprowadzić ^ [poprawnie. Nie rozwiązało to jednak mojego problemu.

wprowadź opis zdjęcia tutaj

Więc jakie inne zmiany mogę spróbować, aby to zadziałało?

dodatkowe informacje

$ uname -a
Linux xxxxxxx 3.4.7-1-ARCH #1 SMP PREEMPT Sun Jul 29 22:02:56 CEST 2012 x86_64 GNU/Linux

-

$ xterm -version 
XTerm(281)

-

$ vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Jul 13 2012 05:24:27)
Included patches: 1-600
Compiled by ArchLinux
Big version with GTK2 GUI.  Features included (+) or not (-):
+arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent 
+clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments 
+conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con_gui +diff 
+digraphs +dnd -ebcdic +emacs_tags +eval +ex_extra +extra_search +farsi 
+file_in_path +find_in_path +float +folding -footer +fork() +gettext 
-hangul_input +iconv +insert_expand +jumplist +keymap +langmap +libcall 
+linebreak +lispindent +listcmds +localmap +lua +menu +mksession +modify_fname 
+mouse +mouseshape +mouse_dec +mouse_gpm -mouse_jsbterm +mouse_netterm 
-mouse_sysmouse +mouse_xterm +mouse_urxvt +multi_byte +multi_lang -mzscheme 
+netbeans_intg +path_extra +perl +persistent_undo +postscript +printer -profile
 +python -python3 +quickfix +reltime +rightleft +ruby +scrollbind +signs 
+smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary 
+tag_old_static -tag_any_white -tcl +terminfo +termresponse +textobjects +title
 +toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo 
+vreplace +wildignore +wildmenu +windows +writebackup +X11 -xfontset +xim 
+xsmp_interact +xterm_clipboard -xterm_save 
   system vimrc file: "/etc/vimrc"
     user vimrc file: "$HOME/.vimrc"
      user exrc file: "$HOME/.exrc"
  system gvimrc file: "/etc/gvimrc"
    user gvimrc file: "$HOME/.gvimrc"
    system menu file: "$VIMRUNTIME/menu.vim"
  fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK  -pthread -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng15   -I/usr/local/include  -march=x86-64 -mtune=generic -pipe -fstack-protector --param=ssp-buffer-size=4  -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1      
Linking: gcc   -L. -Wl,-O1,--sort-common,--as-needed,-z,relro,--hash-style=gnu -rdynamic -Wl,-export-dynamic  -Wl,-E -Wl,-rpath,/usr/lib/perl5/core_perl/CORE  -Wl,-O1,--sort-common,--as-needed,-z,relro -L/usr/local/lib -Wl,--as-needed -o vim   -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lglib-2.0   -lSM -lICE -lXt -lX11 -lXdmcp -lSM -lICE -lm -lncurses -lnsl   -lacl -lattr -lgpm -ldl  -L/usr/lib -llua  -Wl,-E -Wl,-rpath,/usr/lib/perl5/core_perl/CORE -Wl,-O1,--sort-common,--as-needed,-z,relro,--hash-style=gnu -fstack-protector -L/usr/local/lib  -L/usr/lib/perl5/core_perl/CORE -lperl -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc -L/usr/lib/python2.7/config -lpython2.7 -lpthread -ldl -lutil -lm -Xlinker -export-dynamic   -lruby -lpthread -lrt -ldl -lcrypt -lm  -L/usr/lib   

-

$ ls -l /usr/share/terminfo/x/xterm-256color 
-rw-r--r-- 1 root root 3336 Feb  8  2012 /usr/share/terminfo/x/xterm-256color

.vimrc

set t_Co=256

.Xdefault

!--------------------- XTERM ------------------------
xterm*dynamicColors:    true
xterm*background:       black
xterm*foreground:        #BBBBBB
xterm*utf8:             2
xterm*eightBitInput:    true
xterm*saveLines:        32767
xterm*scrollTtyKeypress:       true
xterm*scrollTtyOutput:  false
xterm*scrollBar:        false
xterm*loginShell:       true
xterm*faceName:         xft:Dejavu Sans Mono:size=10
xterm*jumpScroll:       true
xterm*multiScroll:      true
xterm*toolBar:          false
xterm*geometry:         100x30

EDYCJA: Próby rozwiązań

Zainstalowałem już rxvt-unicode i używałem go wcześniej. Miałem jednak ten sam problem. Oto porównanie tych dwóch. Po lewej stronie jest xterm, a po prawej urxvt. Otwarty plik to .Xdefaults, który pokazuje ustawienia urxvt, z których jeden może być problemem?

xterm left urxvt right

Uruchomiłem również skrypt testowy kolorów z pozornie pozytywnymi wynikami. Top to xterm bottom to urxvt. top xterm bottom urxvt

$ echo $TERM
xterm-256color

Rozwiązanie obejścia

Teraz używam CSApprox i wydaje się, że działa wystarczająco dobrze. Nadal jestem zdezorientowany, dlaczego motyw nie działa, mimo że ma zdefiniowane odpowiednie ustawienia kolorów konsoli. Być może ma to coś wspólnego ze sposobem, w jaki uważa się vim. Został zainstalowany jako część pakietu gvim, więc mógł ignorować ustawienia cterm.

EDYCJA: A teraz wszystko wydaje się w porządku ..

O dziwo po zainstalowaniu CSApprox i usunięciu go wszystko wydaje się działać tak, jak powinno. Właśnie pobrałem kolejny schemat kolorów i załadował się idealnie, nawet bez uruchomionego modułu CSApprox.

jmathew
źródło
Jaki jest twój $ TERM? Czy vim wie, że może używać 256 kolorów?
Richard Hum,
1
xterm jest dość problematyczny w przypadku UTF8 i kolorów. Czy zastanawiałeś się nad wykorzystaniem urxvti ratowaniem pośpiechu? ( pacman -S rxvt-unicode).
Caleb
1
Jak pisałeś ^[? Musisz to zrobić za pomocą Ctrl + V + Esc.
Mikel,
@Mikel miałeś rację co do tego, ale wydaje się, że to nie miało znaczenia
jmathew
@Caleb Jakie masz na myśli problemy? Właściwie przełączyłem się z rxvt na xterm, aby uzyskać lepszą obsługę UTF-8, a dla mnie 256 kolorów działa w obu przypadkach. Używam z TERM=screen-256colorpowodu tmux, ale rzeczy działają również z xterm-256colorzewnętrznym tmux.
jw013,

Odpowiedzi:

3

Caleb ma rację w swoim komentarzu. xterm jest dość stary i powinieneś rozważyć przejście na urxvt - przynajmniej wersję 256 i utf-8, skontaktuj się z menedżerem pakietów, aby zainstalować właściwą.

Mam identyczny zestaw do twojego - niesamowite WM, vim, urxvt, tmux / screen - i wszystkie działają dobrze z 256 kolorami i utf-8. Ustawiłem TERM na xterm-256colorwypadek, gdybyś musiał ustawić to ręcznie.

Hum ... Czy po edycji możesz sprawdzić, czy motyw kolorów vim jest poprawnie zdefiniowany dla terminali?

Sardathrion - Przywróć Monikę
źródło
nie jestem pewien, co dokładnie masz na myśli. peaksea.vim używa ctermfg / ctermbg, ale ma również zdefiniowane funkcje GUI. Czy to może przeszkadzać?
jmathew
Czy możesz spróbować z inną kolorystyką? Nie spodziewam się, że to zrobi dużą różnicę, ale nigdy nie wiadomo. Inną rzeczą, o której mogę myśleć, jest ponowna kompilacja vima ze źródła, domyślnie wymuszająca 256 kolorów. Może paczka w łuku jest dziwna ...
Sardathrion - Przywróć Monikę
1

Nie tylko terminal powinien obsługiwać 256 kolorów, motyw w vimie będzie odnosił się do kolorów w .Xdefaults / .Xresources. Aby to naprawić, powinieneś użyć tych samych kolorów co autor motywu lub zamiast tego użyć gvim.

Zerkając na kod, widzę, że poprawnie obsługuje gvim, dlatego używanie CSAprox działa, ponieważ pobiera kody kolorów gvim w HEX (np .: # 123ABC) i myślę, że tłumaczą je na końcowe kolory.

Przykład

Vim w trybie konsoli pobierze kolory z:

hi Normal ctermfg=16 ctermbg=254

w trybie graficznym:

hi Normal guifg=#d0d0d0 guibg=#202020

Tak więc, jeśli zainstalowałeś jakiś „motyw” dla kolorów terminalu, wpłynęłoby to na kolory uzyskiwane w Vimie. Sprawdź również, czy masz

set background=dark

w twoim .vimrc

Alex
źródło
Tak, rozumiem, że cterm jest używany w konsoli. Chodzi o to, że nie mam pliku .Xresources i nic w moich .Xdefault, które ustawiają kolor innych, może być na pierwszym planie i w tle. Żaden z kolorów nie został ponownie zdefiniowany. Jedyne, co mogłem sobie wyobrazić, to jeśli autor zdefiniowałby .Xdefaults / .Xresources, który różni się od domyślnych. Wygląda jednak na to, że każdy 256-kolorowy motyw termiczny, którego używam, różni się znacznie od tego, jak powinien wyglądać. Czy jest jakiś inny plik, który ustawia kolory, których mi brakuje?
jmathew
Myślę, że jeśli mówimy o X11, to tylko X. Domyślne i .Xresources są jedynymi zaangażowanymi plikami (były one przestarzałe w systemach Archlinux). Oczywiście domyślne kolory terminali muszą znajdować się w niektórych miejscach i mogą być różne, biorąc pod uwagę różne dystrybucje linuksa. Ponadto nie możemy zapominać, że emulatory terminali, takie jak Gnome Terminal, mogą mieć niestandardowe kolory lub korzystać z systemu, ponieważ nie jesteśmy pewni, czy twórca motywu użył niestandardowych kolorów, czy nie, chociaż jest to bardzo prawdopodobne. Każdy dziwak, który, podobnie jak ja, stworzył kiedyś motyw vima, z pewnością ma własne kolory terminali.
Alex
0

spróbuj umieścić:

export TERM=xterm-256color

w twoim bashrc.

To powinno to naprawić ...

phildobbin
źródło
2
Eksportowanie wartości $ TERM w .bashrcrzadko rzadko „naprawia” cokolwiek; bardziej prawdopodobne są inne niezamierzone problemy ...
jasonwryan