Ich verstehe nicht term
genau, wie mein Farbschema mit der Einstellung in vim interagiert, und dies behindert meine Fähigkeit, die korrekte Anzeige in neovim zu erreichen.
In meiner .vimrc-Datei muss das richtige Verhalten des betreffenden Farbschemas festgelegt werden
set term=xterm
set t_Co=256
Wenn Sie eine dieser Einstellungen weglassen, wird das Farbschema nicht korrekt angezeigt:
richtig falsch anders falsch
Das Schema sieht folgendermaßen aus:
set background=dark
hi clear
if exists("syntax_on")
syntax reset
endif
let g:colors_name="impact3"
if exists("g:impact_transbg")
hi Normal ctermfg=255 ctermbg=none
hi NonText ctermfg=DarkGray ctermbg=none
hi Statement ctermfg=Blue ctermbg=none
hi Comment ctermfg=DarkGray ctermbg=none cterm=bold term=bold
hi Constant ctermfg=173 ctermbg=none
hi Identifier ctermfg=Cyan ctermbg=none
hi Type ctermfg=DarkGreen ctermbg=none
hi Folded ctermfg=0 ctermbg=235 cterm=underline term=none
hi Special ctermfg=Blue ctermbg=none
hi PreProc ctermfg=LightGray ctermbg=none cterm=bold term=bold
hi Scrollbar ctermfg=Blue ctermbg=none
hi Cursor ctermfg=white ctermbg=none
hi ErrorMsg ctermfg=Red ctermbg=none cterm=bold term=bold
hi WarningMsg ctermfg=Yellow ctermbg=none
hi VertSplit ctermfg=0 ctermbg=0
hi Directory ctermfg=Cyan ctermbg=DarkBlue
hi Visual ctermfg=White ctermbg=Gray cterm=underline term=none
hi Title ctermfg=255 ctermbg=Blue
hi String ctermfg=Blue ctermbg=none
hi StatusLine term=bold cterm=bold,underline ctermfg=White ctermbg=Black
hi StatusLineNC term=bold cterm=bold,underline ctermfg=Gray ctermbg=Black
hi LineNr term=bold cterm=bold ctermfg=2 ctermbg=None
hi Search ctermfg=Black ctermbg=2
hi TabLine ctermfg=0 ctermbg=DarkGray
hi TabLineFill ctermfg=DarkGray ctermbg=DarkGray
else
hi Normal ctermfg=White ctermbg=Black
hi NonText ctermfg=DarkGray ctermbg=Black
hi Statement ctermfg=Blue ctermbg=Black
hi Comment ctermfg=DarkGray ctermbg=Black cterm=bold term=bold
hi Constant ctermfg=DarkCyan ctermbg=Black
hi Identifier ctermfg=Cyan ctermbg=Black
hi Type ctermfg=DarkGreen ctermbg=Black
hi Folded ctermfg=DarkGreen ctermbg=Black cterm=underline term=none
hi Special ctermfg=Blue ctermbg=Black
hi PreProc ctermfg=LightGray ctermbg=Black cterm=bold term=bold
hi Scrollbar ctermfg=Blue ctermbg=Black
hi Cursor ctermfg=white ctermbg=Black
hi ErrorMsg ctermfg=Red ctermbg=Black cterm=bold term=bold
hi WarningMsg ctermfg=Yellow ctermbg=Black
hi VertSplit ctermfg=White ctermbg=Black
hi Directory ctermfg=Cyan ctermbg=DarkBlue
hi Visual ctermfg=White ctermbg=DarkGray cterm=underline term=none
hi Title ctermfg=White ctermbg=DarkBlue
hi StatusLine term=bold cterm=bold,underline ctermfg=White ctermbg=Black
hi StatusLineNC term=bold cterm=bold,underline ctermfg=Gray ctermbg=Black
hi LineNr term=bold cterm=bold ctermfg=White ctermbg=Black
endif
In Neovim term
kann nicht festgelegt werden. Ich habe versucht, neovim mit einem manuell festgelegten $ TERM wie folgt aufzurufen:
TERM=xterm nvim
Dies führte zu einer korrekten Darstellung der Farben in regulären VIM-Dateien (entspricht der Einstellung des Ausdrucks in .vimrc). In Neovim sieht dies jedoch folgendermaßen aus:
Warum ist die Kombination von set term=xterm
und set t_Co=256
erforderlich, um die korrekte Anzeige dieses Farbschemas in vim zu erzielen, und warum führt die entsprechende Kombination von Einstellungen in neovim zu einem anderen Ergebnis?
Bearbeiten:
Die Standardeinstellung ist $TERM=xterm256-color
, die aus irgendeinem Grund xterm
in regulären Versionen überschrieben werden muss , um die Farbanzeige korrekt zu machen. Mit der Umgebungsvariablen 256 sieht neovim folgendermaßen aus:
Dies ist identisch mit regulären Vim xterm256-color
, aber nicht wie beabsichtigt. Mein Ziel ist es zu verstehen, warum der xterm-Hack in vim notwendig ist / funktioniert und warum er in neovim nicht gleich aussieht.
Beachten Sie, dass viele der Farben mit der oben genannten Einstellung für die Umgebungsvariable korrekt angezeigt werden. Besondere Ausnahmen sind Zeilennummern und Hintergrund. Ich vermute, dass die Art und Weise, wie die Farben in diesem speziellen Farbschema angegeben sind, beteiligt sein könnte.
quelle
set term=xterm
.Antworten:
Hauptproblem
Das Hauptproblem wird durch die Reihenfolge der Befehle in Ihrem Computer verursacht
.vimrc
.Sie legen die
g:impact_transbg
Variable fest, nachdem Sie das Farbschema geladen haben. Daher ist die Variable nicht vorhanden, wenn sie von der Anweisung des Farbschemas überprüft wirdif
, und die zweite Version des Farbschemas (imelse
Block) wird verwendet.Um das Problem zu beheben, müssen Sie lediglich die Zeile, in der die Variable festgelegt ist, über die Zeile verschieben, in die Sie das Farbschema laden:
Sie können (und sollten!) Dann die unnötigen Zeilen von Ihrem entfernen
.vimrc
:Andere Probleme
Ich kann auch ein paar andere Missverständnisse / Verwirrungen aufklären, die Sie möglicherweise darüber haben, wie das alles funktioniert:
Erläutern des Verhaltens von
'term'
&'t_Co'
Ihr $ TERM ist auf gesetzt
xterm256-color
. Vim liest dies und fragt terminfo (oder termcap) ab, um herauszufinden, wie viele Farben das Terminal unterstützt, und legt diese dann't_Co'
entsprechend fest. Vorausgesetzt, Ihr $ TERM ist korrekt (Ihr ist) und Ihre terminfo-Datenbank enthält die korrekten Informationen für das Terminal (Ihr Terminals), das Sie niemals manuell zurücksetzen müssen't_Co'
.Sie setzen Vim's dann jedoch manuell
'term'
auf xterm. Ihr Terminfo teilt Vim mit, dass dieses Terminal nur 8 Farben unterstützt. Wenn Sie dies hinzufügen, wird't_Co'
dies fälschlicherweise auf 8 gesetzt. Sie setzen manuell't_Co'
auf 256 zurück, aber wenn Sie die'term'
Einstellung auf dem richtigen Wert belassen hätten, hätten Sie dies nicht nötig .Wenn Sie
't_Co'
nach dem Einstellen manuell wechselng:impact_transbg
, wird das Farbschema übrigens neu geladen (damit sich das Farbschema an die neue Anzahl von Farben anpasst), und dag:impact_transbg
es jetzt eingestellt ist, erhalten Sie die gewünschten Farben.( Wenn die Zeileneinstellung
'term'
weggelassen wird,'t_Co'
ist sie bereits auf 256 gesetzt, wenn Sie in Ihrer .vimrc-Datei zur letzten Zeile gelangen, und das Farbschema wird nicht neu geladen: daher falsche Farben.)Also, um es noch einmal zusammenzufassen:
Ergebnis: Das Farbschema wird neu geladen, wenn
't_Co'
256 eingestellt ist und die Farben korrekt sind.Ergebnis: Farbschema wird per
colorscheme
Befehl geladen , Variable existiert nicht, Farben stimmen nicht.Ergebnis: Farbschema wird per
colorscheme
Befehl geladen , Variable existiert nicht und Vim verwendet nur 8 Farben, Farben sind falsch.Ergebnis: Farbschema wird per
colorscheme
Befehl geladen , Variable existiert nicht, Farben stimmen nicht.Ergebnis: Colorscheme durch geladen wird
colorscheme
Befehl, variable tut exist, so Farben korrekt sind. (Und als Bonus'term'
und't_Co'
sind auch richtig!)Das Verhalten in NeoVim ist einfach deshalb anders, weil der zu setzende Anruf
't_Co'
ignoriert wird, wie andere Antwortende bereits erwähnt haben.'background'
Nachdem Sie das Farbschema festgelegt haben, legen Sie auch fest
'background'
. Für dieses spezielle Farbschema ist dies völlig unnötig, da das erste, was das Farbschema tut, das Einstellen'background'
auf ist'dark'
.Beachten Sie, dass ich mit dem anderen Antwortenden, der vorschlägt, dass Sie
'background'
nach dem Laden Ihres Farbschemas festlegen sollten, nicht einverstanden bin. Das Farbschema kann den Wert von verwenden'background'
, um seine Farben anzupassen.'background'
Daher ist die Einstellung vor dem Laden des Farbschemas die offensichtlichere Reihenfolge. (Beachten Sie jedoch'background'
, dass Vim alle geladenen Farbschemata neu lädt, wenn Sie die Einstellung ändern, sodass das anschließende Einstellen'background'
ebenfalls funktioniert: Es ist einfach nicht optimal.)quelle
Im Fall von Neovim,
t_Co
undTERM
keinen Unterschied machen.Sie rufen
set background=dark
vor und nach dem Anruf ancolorscheme impact3
. Bewegen Sieset background=dark
auf die Unterseite des Farbschemas , und entfernen Sie den anderen Anruf von Ihrem vimrc.Von
:help 'background'
:Siehe auch: https://github.com/justinmk/molokai/commit/aa1cc201c743dd7d1b80bb2e2b5fbb7894ebfe5f
t_Co
weil es 256 annimmt, es sei denn, Sie aktivieren "True Color" .t_*
Optionen:help t_xx
.&term
setzen, weil es bedeutungslos ist. Neovim verwendet Unibilium und andere Mechanismen, um Terminalfähigkeiten zu erkennen.quelle
set background=dark
Anweisung hatten keine Auswirkungen, aber diese Details zur zugrunde liegenden Implementierung sind für mich viel wertvoller.Ich sehe, dass Sie iTerm2 verwenden, also können Sie dies versuchen:
profiles
Registerkarteterminal
rechtsReport terminal type
wählenxterm-256color
quelle
xterm-256color
. Ich habe mit Ihrem Verfahren nachgearbeitet, um den so eingestellten Terminaltyp zu finden.Ihnen fehlt eine großartige NeoVim-Funktion. Es gibt ein env var, das bei diesen Sachen hilft. Versuchen Sie dies in Ihrem nvimrc:
Oder
in der Schale.
quelle
guifg
undguibg
. Das Farbschema von OP verwendetctermfg
undctermbg
.Sie müssen Optionen einrichten
in deinem
.config/nvim/init.vim
.quelle
guifg
undguibg
RGB-Werten für Farben. Das Farbschema der Frage verwendet nurctermfg
undctermbg
.Beachten Sie, dass es sich bei dem spezifischen Farbschema tatsächlich um zwei Farbschemasätze innerhalb einer if-else-Klausel handelt. Das Vorhandensein der Variablen
g:impact_transbg
wählt die gewünschte Menge von Farben aus und sollte ursprünglich transparente Hintergründe in dem Farbschema berücksichtigen, von dem diese abgeleitet sind .Das Auskommentieren des 2. Farbschemas und der if-else-Anweisung (wobei nur das gewünschte Farbschema übrig
g:impact_transbg
bleibt und aufgehoben wird) ergibt das beabsichtigte Verhalten sowohl in vim als auch in neovim, selbst wennset term=xterm
undset t_Co=256
entfernt.Dies impliziert, dass
$TERM=xterm-256colors
sowohl in vim als auch in neovim die Bedingungif exists("g:impact_transbg")
fehlschlägt, jedoch die Kombination der Einstellungließ die Bedingung erfolgreich sein. Wenn Sie die if-else-Klausel wie oben beschrieben entfernen, ist das wesentliche Problem behoben, aber die Interaktion zwischen den beiden .vimrc-Begriffseinstellungen und ist noch ungeklärt
g:impact_transbg
.quelle
Versuchen Sie, Ihre
$TERM
Umgebungsvariable wie folgt festzulegen :Versuchen Sie auch, nvim wie folgt zu starten:
Wenn das funktioniert, setzen Sie die
$TERM
Variable dauerhaft in Ihrer Shell.quelle
xterm-256color
. Das Setzen von $ TERM per Export hatte keine Auswirkung.Ich hatte dieses Problem vor kurzem mit dem Thema Solar. Das Problem ist auf die
TERM
Variable env zurückzuführen.Ich habe das Problem behoben, indem ich meinem Terminal-Emulator (in meinem Fall dem Terminator)
env TERM=xterm-256color zsh
anwies , dass er ausgeführt werden soll, anstatt zsh ganz normal zu starten .quelle