iTerm 2 ZSH Farben / Themen werden nicht richtig angezeigt

8

Ich habe einen sauber installierten Mac mit OS X 10.11.4.
Ich habe iTerm 2 installiert und für die Verwendung von oh-my-zsh eingerichtet.

Ich versuche, ein Thema für mein iTerm einzurichten. Ich versuche das avit-Thema zu verwenden.

Es soll so aussehen: Geben Sie hier die Bildbeschreibung ein

Aber was ich bekomme ist:

Geben Sie hier die Bildbeschreibung ein

Vim ist auch verletzt, ich erwarte:

Geben Sie hier die Bildbeschreibung ein

Was ich bekomme:

Geben Sie hier die Bildbeschreibung ein

Hier sind meine Vorlieben:

Geben Sie hier die Bildbeschreibung ein

Ich habe mit dem Report Terminal Type herumgespielt, aber dies ist derjenige, der am besten funktioniert, da die anderen noch schlechter dran sind.

Mein .zshrc sieht folgendermaßen aus: http://pastebin.com/ixe72yjP
Beachten Sie, dass auf dem Pastebin das Kardan-Thema steht, es jedoch mit keinem Thema funktioniert

BEARBEITEN
Es scheint, als würden die Farben von iTerm die in den Themen definierten Farben überschreiben. Ist das erwartetes Verhalten?

Kao
quelle
Die RGB-Werte der ersten 8 oder 16 Farben (die häufig verwendet werden, weil sie nicht von der 256-Farben-Erweiterung abhängen) hängen vom Terminalemulator ab und sind häufig konfigurierbar. Schauen Sie sich die Registerkarte " Farben " des Dialogfelds " Einstellungen " an.
Adaephon
Habe gerade deine Bearbeitung gesehen. Ja das wird erwartet. In (den meisten?) Terminals können Themen keine Farben anhand ihres RGB-Werts festlegen, sondern verwenden stattdessen den Farbindex. Je nach Terminal 8 stehen 16, 88, 256 oder 256 Farben zur Verfügung. Während die meisten Terminals 256 Farben unterstützen und die Indizes 16 bis 255 für die meisten Terminals gleich zu sein scheinen, verwenden viele Themen nur 0-15 (Shell mehr als vim). Es ist portabler und Benutzer können die Farben in ihrem Terminal nach ihren Wünschen ändern, ohne jedes Thema zu ändern (Vim, Dircolors, Shell usw.)
Adaephon
@Adaephon Also wirklich, ein iTerm-Thema ist genau so, wie es sich verhält, und ich muss die Farben nach meinen Wünschen anpassen, damit es wie das gewünschte Thema aussieht?
Kao
Du hast das Wesentliche verstanden. Obwohl sich "iTerm-Thema" auf die Farbeinstellungen im Terminal-Emulator beziehen würde, wären "avit" und "kardan" zsh-Themen ( oh-my-zsh- Themen, um genau zu sein). Siehe meine Antwort für eine hoffentlich bessere Erklärung.
Adaephon

Antworten:

5

Hier arbeiten zwei Ebenen mit Einstellungen / Themen:

  • Das Terminal oder Terminalemulator, in Ihrem Fall iTerm2

    Je nach Terminal wird nur eine begrenzte Farbpalette unterstützt. "Traditionell" gab es 16 Farben: 8 Normal und 8 Hell / Hell. Ihnen wird der Code 0 bis 7 bzw. 8 bis 15 zugewiesen. Sie haben auch Namen mit den Codes nund n+8dem gleichen Namen:

    • 0und 8: schwarz
    • 1und 9: rot
    • 2und 10: grün
    • 3und 11: gelb
    • 4und 12: blau
    • 5und 13: Magenta
    • 6und 14: Cyan
    • 7und 15: weiß

    Obwohl die Namen gut definiert sind, sind die genauen Farbwerte selbst in den Standardeinstellungen für verschiedene Terminals nicht und variieren stark. (Beispiele finden Sie im Abschnitt Farben auf der Wikipedia-Seite zum ANSI-Escape-Code. ) Bei den meisten Terminalemulatoren können diese 16 Farben vom Benutzer frei konfiguriert werden (siehe Registerkarte " Farben" in den iTerm-Einstellungen).

    Viele (wenn nicht die meisten) modernen Terminalemulatoren unterstützen eine 256-Farben-Palette, die aus den oben genannten 16 Farben, 216 Farben auf einem 6 x 6 x 6 RGB-Farbwürfel und 32 Graustufenfarben besteht. Abgesehen von den ersten 16 Farben scheinen diese Farben für die meisten Terminalemulatoren gleich zu sein (siehe meine Antwort auf eine diesbezügliche Frage zu SO für weitere Details).

    Es gibt sogar eine wachsende Unterstützung für 24-Bit-Echtfarben. Nach diesem Gist iTerm2 unterstützt dies bereits in der Beta - Builds. (Sie können dies mit überprüfen for a in {0..255}; printf "\x1b[48;2;255;${a};0m \x1b[0m". Es sollte einen glatten Farbverlauf von rot nach gelb drucken.)

    Kurz gesagt : Ein Terminal- Thema ( iTerm2 ) ist nur eine Farbpalette, die Indizes auf Echtfarben-RGB-Werte abbildet. Einige Terminals (zumindest unter Linux; ich kenne insbesondere OS X und iTerm2 nicht ) implementieren tatsächlich umschaltbare Farbthemen .

  • Die Shell oder Anwendung, in Ihrem Fall zshmit dem Konfigurationsframework oh-my-zsh und vim:

    Da 24-Bit-Echtfarben noch nicht weit verbreitet sind, setzen Themen Farben normalerweise anhand der Indexnummer auf der Terminalpalette oder sogar anhand des Namens. Zum Beispiel

    print -P '%F{yellow}yellow %F{2}green %1Fred %F{117}light blue' 

    print -Pinterpretiert den String wie in der Eingabeaufforderung. %Fändert die Vordergrundfarbe.

    Obwohl die meisten Terminals 256 Farben unterstützen, gibt es immer noch einige Themen, die nur (die ersten) 16 Farben verwenden. Dafür gibt es mehrere Gründe:

    • Es funktioniert "überall" (ältere Maschinen, falsch konfigurierte Terminals).
    • Bei den meisten Terminalemulatoren können die Farben vom Benutzer leicht nach Geschmack geändert werden.
    • Einige Themen sind möglicherweise sogar älter als die breite Verfügbarkeit von Terminals mit 256 Farben.

    Das heißt nicht, dass es im Gegenteil keine Themen gibt, die 256 Farben verwenden. Ich scheine nur, dass derjenige, den Sie gewählt haben, keiner von ihnen ist.

    Kurz gesagt : Ein Terminal- (oder Anwendungs-) Thema kann nur Farbcodes zuweisen, nicht RGB-Echtfarbenwerte. Die tatsächlichen Farben hängen von den Terminaleinstellungen ab. Wenn die Farbe im Terminal geändert wird, wirkt sich dies auf alle darin ausgeführten Anwendungen aus.

Der Unterschied zwischen den Screenshots des erwarteten Ergebnisses und dem, was Sie tatsächlich erhalten, ist auf die unterschiedlichen Farbeinstellungen der Terminals zurückzuführen. Um dies zu lösen, können Sie:

  • Ändern Sie die iTerm2- Einstellungen so, dass sie den Farben der Screenshots entsprechen
  • Verwenden Sie ein anderes Thema, bei dem nur die Farben 16-256 verwendet werden (die weitgehend festgelegt sind).
  • Verwenden Sie True Color-fähige Software (z. B. iTerm2 Beta (möglicherweise bald in der Release-Version, falls nicht bereits vorhanden) und Neovim ) und Themes ( Neovim scheint die GUI-Einstellungen zu verwenden, wenn True Color aktiviert ist). Der oben erwähnte Kern hat eine Liste.
Adaephon
quelle
Ich sehe dieses Problem immer noch nicht in, vimsondern in zsh. Sicherlich brauchen wir keine Beta-Version von iTerm2 mehr?
Thomas Ahle