Dziwne zachowanie koloru Vima wewnątrz ekranu z 256 kolorami

Próbowałem sprawić, aby podświetlenie składni (z 256 kolorami) vim działało wewnątrz screen, które działa wewnątrz gterm.

Na początku działa całkiem dobrze. To, co mam na myśli przez "na początku", to po uruchomieniu screen i wprowadzeniu vim, kolory wyglądają dobrze, a naprawdę jest ich 256.

Ale po jakimś czasie (Nie wiem dokładnie jak długo) Kolory automatycznie zmieniają się z powrotem do wyglądu, jakby było ich tylko 8 (lub 16?) colors=

Na przykład, po tym jak już to nastąpi, jeśli wpiszę komendę

hi Comment ctermfg=68

Wewnątrz vim komentarze wydają się być" czyste " zielone; jednak jeśli otworzę Inny vim na zewnątrz ekranu( w tym samym terminalu), to tym samym poleceniem komentarze wydają się być "żółtawe" zielone.

Oto mój .ustawienia ekranu związane z kolorem:

attrcolor b ".I"
defbce "on"
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
term xterm-256color

Po uruchomieniu skryptu Pythona, aby wyświetlić wszystkie kolory, dowiaduję się, że może to być problem samego ekranu i nie ma nic wspólnego z Vimem.

Zrobiłem to, że wewnątrz sesji screen z problemami, ten skrypt daje 256 kolorów, ale wiele z nich jest w rzeczywistości takich samych; jednak, gdy zaczynam nową sesję ekranową z tą samą konfiguracją, ten skrypt daje 256 kolorów, które są różne od siebie.

Edit:

Ostatniej nocy podłączyłem się do mojego komputera z Linuksem (który jest w moim biurze i jest zawsze włączony) z putty, a następnie otworzyłem sesję screen z wiele okien w nim. Kolory są poprawne zeszłej nocy. Zanim poszedłem spać odsunąłem sesję screen i zamknąłem putty.

Teraz rano, kiedy dołączam tę sesję screen W putty ponownie, Kolory się psują: wyglądają tak, jakby było tylko 8 kolorów.

Kolory są w porządku na zewnątrz screen (ale nadal w putty).

Edit:

Trzy lata później po tym, jak zadałem to pytanie, dzisiaj zobaczyłem podobny problem. Problem polega na tym, że vim może wyświetlać 256 kolorów na zewnątrz screen i screen może wyświetlać 256 kolorów za pomocą skryptu testowego, ale vim nie może wyświetlać żadnego koloru (może wyświetlać tylko czarno-biały) wewnątrz screen. Jako notatkę dla siebie, oto plik .screenrc, którego używam

hardstatus alwayslastline "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %Y-%m-%d %c"
shell "bash"
startup_message off
vbell off
altscreen on
attrcolor b ".I"
defbce "on"
termcapinfo xterm* 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
term screen-256color

Rozwiązanie problemu jest już wymienione w zaakceptowanej odpowiedzi, a mianowicie muszę uwzględnić

export TERM=xterm-256color

W .bashrc.

Author: Vadim Kotov, 2011-07-22

3 answers

Krótka Odpowiedź

Ustaw TERM na xterm-256color w swoim .bashrc i umieść term screen-256color w swoim .screenrc.

Długa Odpowiedź

Oto dlaczego to się łamie: gnome-terminal, screen, tmux, bash, putty i vim mają Wszystkie zostały napisane tak, aby inteligentnie obsługiwać 256 kolorów, ale musisz ustawić wszystko poprawnie w najwcześniejszym możliwym momencie. Użycie termcapinfo w twoim .screenrc jest w rzeczywistości rozwiązaniem z taśmy klejącej!

Jeśli twój TERM jest ustawiony poprawnie, będzie sygnałem do Basha, że jesteś w 256-kolorowy tryb, co oznacza, że będzie dobrze grać z ekranu jest w trybie 256-kolor, jak również.

Więc, w Twoim .bashrc, export TERM=xterm-256color. [1]

W twoim .screenrc użyj screen-256color dla TERM zamiast xterm-256color, a resztę wykasuj!

W konfiguracji PuTTy użyj putty-256color.

Możesz pobrać pliki wejściowe termcap i umieścić je w ~/.terminfo/s i ~/.terminfo/p, jeśli twoje pudełko nie ma ich domyślnie.


Przypisy

[1] Ustawienie TERM na xterm-256color w twoim .bashrc może być trochę zarozumiały, zwłaszcza jeśli używasz tego samego .bashrc na wielu maszynach. Okazało się, że poniższy fragment jest dość skuteczny: {]}

case "$TERM" in
*-256color)
    alias ssh='TERM=${TERM%-256color} ssh'
    ;;
*)
    POTENTIAL_TERM=${TERM}-256color
    POTENTIAL_TERMINFO=${TERM:0:1}/$POTENTIAL_TERM

    # better to check $(toe -a | awk '{print $1}') maybe?
    BOX_TERMINFO_DIR=/usr/share/terminfo
    [[ -f $BOX_TERMINFO_DIR/$POTENTIAL_TERMINFO ]] && \
        export TERM=$POTENTIAL_TERM

    HOME_TERMINFO_DIR=$HOME/.terminfo
    [[ -f $HOME_TERMINFO_DIR/$POTENTIAL_TERMINFO ]] && \
        export TERM=$POTENTIAL_TERM
    ;;
esac

alias ssh jest środkiem obronnym zapobiegającym próbie otwarcia terminala 256-kolorowego na zdalnej maszynie, która niekoniecznie GO obsługuje. Blok główny jest drugą połową równania; sprawdza, czy odpowiedni wpis terminfo istnieje, i ustawia go, jeśli tak.

 88
Author: Max Cantor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-02 21:31:07

Max ma doskonałą odpowiedź, ale faktycznie musiałem Ponownie zainstalować ekran z ./configure --enable-colors256 aby upewnić się, że plik config.h ma ustawione #define COLORS256 1, co nie było domyślnie ustawione na moim komputerze. Następnie okazało się, że inne ustawienia nie były konieczne, dopóki upewniłem się, że mój TERM został ustawiony na xterm-256color.

 16
Author: Nick Merrill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-08 23:18:06

W najnowszej wersji screena (v4.99. 0) nie ma potrzeby używania term screen-256color w swoim .screenrc. Nawet bez tego ustawienia Kolor Vima wewnątrz i na zewnątrz ekranu jest dokładnie taki sam.

Uwaga 1: przetestowałem tę funkcję na Mac OS High Sierra 10.13.4 i Ubuntu 16.04.

Można uzyskać najnowszą wersję ekranu za pomocą git clone https://git.savannah.gnu.org/git/screen.git.

Uwaga 2: W przeciwieństwie do niektórych poprzednich wersji, podczas gdy konfigurowanie tej wersji ekranu nie ma potrzeby używania --enable-colors256 opcja

Uwaga 3: aby konfiguracja powiodła się, musisz mieć obsługę PAM. W ubuntu możesz użyć sudo apt-get install libpam0g-dev

Uwaga 4: będziesz potrzebował sudo dostępu na Ubuntu podczas wykonywania make install, ponieważ ten krok używa chown.

 1
Author: Nikhil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-25 11:24:50