Je ne comprends pas bien comment mon jeu de couleurs interagit avec le term
paramètre dans vim et cela empêche ma capacité à l'afficher correctement dans neovim.
Dans mon fichier .vimrc, le comportement correct du jeu de couleurs en question nécessite la définition
set term=xterm
set t_Co=256
L'omission de l'un de ces paramètres entraîne un affichage incorrect du jeu de couleurs:
correct incorrect différent incorrect
Le schéma ressemble à ceci:
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
Dans neovim, term
ne peut pas être défini. J'ai essayé d'appeler neovim avec un $ TERM défini manuellement comme ceci:
TERM=xterm nvim
Cela a produit l'affichage correct des couleurs dans vim régulier (c'est-à-dire équivalent à la définition d'un terme dans .vimrc), mais dans neovim, cela ressemble à ceci:
Pourquoi la combinaison de set term=xterm
et set t_Co=256
nécessaire pour produire l'affichage correct de ce jeu de couleurs dans vim et pourquoi la combinaison équivalente de paramètres produit un résultat différent dans neovim?
Éditer:
La valeur par défaut est $TERM=xterm256-color
, qui, pour une raison quelconque, doit être remplacée xterm
dans vim standard pour que l'affichage des couleurs soit correct. Avec la variable d'environnement à 256 par défaut, neovim ressemble à ceci:
C'est identique à vim régulier avec xterm256-color
, mais pas comme prévu. Mon objectif est de comprendre pourquoi le hack xterm est nécessaire / fonctionne dans vim, et pourquoi il n'a pas la même apparence dans neovim.
Notez que la plupart des couleurs apparaissent correctement avec le paramètre de variable env ci-dessus, à l'exception notable des numéros de ligne et de l'arrière-plan. Je soupçonne que la façon dont les couleurs sont spécifiées dans ce schéma de couleurs spécifique peut être impliquée.
la source
set term=xterm
.Réponses:
Problème principal
Le principal problème que vous rencontrez est dû à l'ordre des commandes dans votre
.vimrc
.Vous définissez la
g:impact_transbg
variable après avoir chargé le jeu de couleurs, et donc la variable n'existe pas lorsqu'elle est vérifiée par l'if
instruction du jeu de couleurs , et la deuxième version du jeu de couleurs (dans leelse
bloc) est utilisée.Pour résoudre ce problème, il vous suffit de déplacer la ligne qui définit la variable au-dessus de la ligne où vous chargez le schéma de couleurs:
Vous pouvez (et devriez!) Puis supprimer les lignes inutiles de votre
.vimrc
:Autres issues
Je peux également clarifier quelques autres idées fausses / confusions que vous pourriez avoir sur la façon dont tout cela fonctionne:
Expliquer le comportement de
'term'
&'t_Co'
Votre $ TERM est défini sur
xterm256-color
. Vim lit cela et interroge terminfo (ou termcap) pour savoir combien de couleurs le terminal prend en charge, puis définit en't_Co'
conséquence. En supposant que votre $ TERM est correct (le vôtre l'est) et que votre base de données terminfo contient les informations correctes pour ce terminal (le vôtre le fait), vous ne devriez jamais avoir besoin de réinitialiser manuellement't_Co'
.Cependant, vous définissez ensuite manuellement Vim's
'term'
sur xterm. Votre terminfo indique à Vim que ce terminal ne prend en charge que 8 couleurs, donc l'ajout de cela entraînera't_Co'
une valeur incorrecte de 8. Vous't_Co'
revenez manuellement à 256, mais si vous aviez laissé le'term'
paramètre à la valeur correcte, vous n'auriez pas eu besoin de .Par ailleurs, lorsque vous modifiez
't_Co'
manuellement après le réglageg:impact_transbg
, cela provoque le rechargement du schéma de couleurs (pour permettre au schéma de couleurs de s'adapter au nouveau nombre de couleurs), et parce qu'ilg:impact_transbg
est maintenant défini, vous obtenez les couleurs que vous désirez.(Avec le paramètre de ligne
'term'
omis,'t_Co'
est déjà défini sur 256 lorsque vous arrivez à la dernière ligne dans votre .vimrc, et donc le schéma de couleurs n'est pas rechargé: d'où des couleurs incorrectes.)Donc, pour récapituler:
Résultat: Colorscheme est rechargé lorsqu'il
't_Co'
est réglé sur 256, les couleurs sont correctes.Résultat: Colorscheme est chargé par la
colorscheme
commande, la variable n'existe pas, les couleurs sont incorrectes.Résultat: Colorscheme est chargé par la
colorscheme
commande, la variable n'existe pas et Vim n'utilise que 8 couleurs, les couleurs sont incorrectes.Résultat: Colorscheme est chargé par la
colorscheme
commande, la variable n'existe pas, les couleurs sont incorrectes.Résultat: Colorscheme est chargé par la
colorscheme
commande, la variable ne existent, si les couleurs sont correctes. (Et en bonus'term'
et't_Co'
sont également corrects!)Le comportement est différent dans NeoVim simplement parce que l'appel à set
't_Co'
est ignoré, comme d'autres répondeurs l'ont déjà mentionné.'background'
Après avoir défini le schéma de couleurs, vous définissez également
'background'
. Pour ce particulier colorscheme, cela est tout à fait inutile, parce que la première chose que le fait colorscheme est de mettre'background'
à'dark'
.Notez que je suis en désaccord avec l'autre répondeur qui suggère que vous devez définir
'background'
après avoir chargé votre schéma de couleurs. Le schéma de couleurs peut utiliser la valeur de'background'
pour ajuster ses couleurs, donc le réglage'background'
avant le chargement du schéma de couleurs est l'ordre le plus évident. (Bien que notez que si vous modifiez le'background'
paramètre, Vim rechargera tous les schémas de couleurs chargés, donc le définir'background'
ensuite fonctionnerait également: ce n'est tout simplement pas optimal.)la source
Dans le cas de Neovim,
t_Co
etTERM
ne faites aucune différence.Vous appelez
set background=dark
avant et après l'appel àcolorscheme impact3
. Déplacez-set background=dark
vous au bas du schéma de couleurs et supprimez l'autre appel de votre vimrc.De
:help 'background'
:Voir également: https://github.com/justinmk/molokai/commit/aa1cc201c743dd7d1b80bb2e2b5fbb7894ebfe5f
t_Co
car il suppose 256 sauf si vous activez la "vraie couleur" .t_*
options, voir:help t_xx
.&term
d'être défini car il n'a pas de sens. Neovim utilise unibilium et d'autres mécanismes pour détecter les capacités des terminaux.la source
set background=dark
déclaration n'ont pas eu d'effet, mais ces détails sur l'implémentation sous-jacente sont beaucoup plus précieux pour moi.Je vois que vous utilisez iTerm2, vous pouvez donc essayer ceci:
profiles
ongletterminal
à droiteReport terminal type
choixxterm-256color
la source
xterm-256color
. J'ai suivi votre procédure pour trouver le type de terminal déjà défini ainsi.Vous manquez une fonctionnalité impressionnante de NeoVim. Il y a un var env qui aide avec ce genre de choses. Essayez de mettre ceci dans votre nvimrc:
Ou
dans la coquille.
la source
guifg
etguibg
. Le schéma de couleurs d'OP utilisectermfg
etctermbg
.Vous devez configurer des options
dans votre
.config/nvim/init.vim
.la source
guifg
et lesguibg
valeurs RVB pour la couleur. Le jeu de couleurs de la question utilise uniquementctermfg
etctermbg
.Notez que le jeu de couleurs spécifique est en réalité deux ensembles de jeux de couleurs dans une clause if-else. L'existence de la variable
g:impact_transbg
sélectionne l'ensemble de couleurs souhaité et était à l'origine destinée à prendre en compte les arrière-plans transparents dans le jeu de couleurs dont elle est dérivée .La mise en commentaire du deuxième schéma de couleurs et de la déclaration if-else (ne laissant que le schéma de couleurs souhaité
g:impact_transbg
et supprimant) donne le comportement prévu à la fois dans vim et neovim, même avecset term=xterm
etset t_Co=256
supprimé.Cela implique que
$TERM=xterm-256colors
dans vim et neovim, le conditionnelif exists("g:impact_transbg")
échoue, mais que la combinaison de la définitiona permis au conditionnel de réussir. La suppression de la clause if-else comme décrit ci-dessus résout le problème matériel, mais il y a toujours un mystère concernant l'interaction entre la paire de paramètres de termes .vimrc et
g:impact_transbg
.la source
Essayez de définir votre
$TERM
variable d'environnement comme ceci:Essayez également de démarrer nvim comme ceci:
Si cela fonctionne, définissez la
$TERM
variable dans votre shell de façon permanente.la source
xterm-256color
. La définition de $ TERM via l'exportation n'a eu aucun effet.J'ai eu ce problème récemment avec le thème solarisé. Le problème venait de la
TERM
variable env.Je l'ai corrigé en disant à mon émulateur de terminal (terminateur dans mon cas) de s'exécuter
env TERM=xterm-256color zsh
au lieu de simplement démarrer zsh comme d'habitude.la source