No tengo una comprensión completa de cómo mi esquema de color está interactuando con la term
configuración en vim y esto está impidiendo mi capacidad para que se muestre correctamente en neovim.
En mi archivo .vimrc, el comportamiento correcto del esquema de color en cuestión requiere configuración
set term=xterm
set t_Co=256
Omitir cualquiera de esas configuraciones da como resultado una visualización incorrecta de la combinación de colores:
correcto incorrecto diferente incorrecto
El esquema se ve así:
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
En neovim, term
no se puede configurar. Intenté invocar a neovim con un $ TERM establecido manualmente de la siguiente manera:
TERM=xterm nvim
Esto produjo la visualización correcta de colores en vim regular (es decir, equivalente a establecer el término en .vimrc), pero en neovim se ve así:
¿Por qué la combinación de set term=xterm
y es set t_Co=256
necesaria para producir la visualización correcta de este esquema de color en vim y por qué la combinación equivalente de configuraciones produce un resultado diferente en neovim?
Editar:
El valor predeterminado es que$TERM=xterm256-color
, por alguna razón, debe anularse xterm
en vim regular para que la visualización del color sea correcta. Con la variable de entorno en el valor predeterminado 256, neovim se ve así:
Esto es idéntico a vim regular con xterm256-color
, pero no como se pretendía. Mi objetivo es entender por qué el hack xterm es necesario / funciona en vim, y por qué no se ve igual en neovim.
Tenga en cuenta que muchos de los colores aparecen correctamente con la configuración de la variable env del término anterior, con excepciones notables como números de línea y fondo. Sospecho que la forma en que se especifican los colores en este esquema de color específico puede estar involucrada.
fuente
set term=xterm
.Respuestas:
Tema principal
El principal problema que está experimentando es causado por el orden de los comandos en su
.vimrc
.Establece la
g:impact_transbg
variable después de cargar el esquema de colores, por lo que la variable no existe cuando se verifica mediante laif
declaración del esquema de colores , yelse
se utiliza la segunda versión del esquema de colores (en el bloque).Para solucionarlo, simplemente necesita mover la línea que establece la variable sobre la línea donde carga el esquema de colores:
Puede (y debería) eliminar las líneas innecesarias de su
.vimrc
:Otros asuntos
También puedo aclarar algunas otras ideas falsas / confusiones que pueda tener sobre cómo funciona todo esto:
Explicando el comportamiento de
'term'
&'t_Co'
Su $ TERM está establecido en
xterm256-color
. Vim lee esto y consulta terminfo (o termcap) para averiguar cuántos colores admite el terminal, y luego establece en't_Co'
consecuencia. Suponiendo que su $ TERM es correcto (el suyo es) y su base de datos terminfo contiene la información correcta para ese terminal (el suyo sí lo hace) que nunca debería necesitar restablecer manualmente't_Co'
.Sin embargo, entonces está configurando manualmente Vim's
'term'
a xterm. Su terminfo le dice a Vim que este terminal solo admite 8 colores, por lo que al agregar esto se't_Co'
configurará incorrectamente a 8. Está configurando manualmente't_Co'
nuevamente a 256, pero si hubiera dejado la'term'
configuración en el valor correcto, no habría necesitado .Por cierto, cuando cambia
't_Co'
manualmente después de la configuracióng:impact_transbg
, hace que el esquema de colores se vuelva a cargar (para permitir que el esquema de colores se adapte a la nueva cantidad de colores), y como ahorag:impact_transbg
está configurado, obtiene los colores que desea.(Con la configuración de línea
'term'
omitida, ya't_Co'
está establecida en 256 cuando llega a la última línea en su .vimrc, por lo que el esquema de colores no se vuelve a cargar: por lo tanto, colores incorrectos).Entonces, para recapitular:
Resultado: Colorscheme se vuelve a cargar cuando
't_Co'
se establece en 256, los colores son correctos.Resultado: Colorscheme se carga por
colorscheme
comando, la variable no existe, los colores son incorrectos.Resultado: Colorscheme se carga por
colorscheme
comando, la variable no existe y Vim solo usa 8 colores, los colores son incorrectos.Resultado: Colorscheme se carga por
colorscheme
comando, la variable no existe, los colores son incorrectos.Resultado: Colorscheme se carga mediante
colorscheme
comandos, variables hace existir, por lo que los colores son correctos. (Y como un bono'term'
y't_Co'
también son correctos!)El comportamiento es diferente en NeoVim simplemente porque
't_Co'
se ignora la llamada a establecer , como ya han mencionado otros respondedores.'background'
Después de configurar el esquema de colores, también se configura
'background'
. Para este particular, colorscheme, esto es totalmente innecesario, porque lo primero que hace es el esquema de colores a juego'background'
a'dark'
.Tenga en cuenta que no estoy de acuerdo con el otro respondedor que sugiere que debe configurar
'background'
después de cargar su esquema de colores. El esquema de colores puede usar el valor de'background'
para ajustar sus colores, por lo que la configuración'background'
antes de cargar el esquema de colores es el orden más obvio. (Aunque tenga en cuenta que si cambia la'background'
configuración, Vim volverá a cargar los esquemas de colores cargados, por lo que configurarlo'background'
después también funcionaría: simplemente no es óptimo).fuente
En el caso de Neovim,
t_Co
yTERM
no hay diferencia.Está llamando
set background=dark
antes y después de la llamadacolorscheme impact3
. Vayaset background=dark
al final del esquema de colores y elimine la otra llamada de su vimrc.De
:help 'background'
:Ver también: https://github.com/justinmk/molokai/commit/aa1cc201c743dd7d1b80bb2e2b5fbb7894ebfe5f
t_Co
porque asume 256 a menos que habilite el "color verdadero" .t_*
opciones, ver:help t_xx
.&term
que se configure porque no tiene sentido. Neovim utiliza unibilium y otros mecanismos para detectar capacidades terminales.fuente
set background=dark
declaración no tuvo efecto, pero esos detalles sobre la implementación subyacente son mucho más valiosos para mí.Veo que usas iTerm2, así que puedes probar esto:
profiles
pestañaterminal
a la derechaReport terminal type
elegirxterm-256color
fuente
xterm-256color
. Seguí su procedimiento para encontrar el tipo de terminal ya configurado de esta manera.Te estás perdiendo una característica impresionante de NeoVim. Hay una env var que ayuda con estas cosas. Intenta poner esto en tu nvimrc:
O
en el caparazón
fuente
guifg
yguibg
. El esquema de colores de OP utilizactermfg
yctermbg
.Necesitas configurar opciones
en su
.config/nvim/init.vim
.fuente
guifg
yguibg
valores RGB para color. El esquema de color de la pregunta solo usactermfg
yctermbg
.Tenga en cuenta que el esquema de color específico es realmente dos conjuntos de esquemas de color dentro de una cláusula if-else. La existencia de la variable
g:impact_transbg
selecciona el conjunto de colores deseado, y originalmente estaba destinada a tener en cuenta los fondos transparentes en el esquema de color del que se deriva .Comentando el segundo esquema de color y la declaración if-else (dejando solo el esquema de color deseado y eliminando
g:impact_transbg
) produce el comportamiento deseado tanto en vim como en neovim, incluso conset term=xterm
yset t_Co=256
eliminado.Esto implica que
$TERM=xterm-256colors
tanto en vim como en neovim, el condicionalif exists("g:impact_transbg")
falla, pero que la combinación de configuraciónpermitió que el condicional tuviera éxito. Eliminar la cláusula if-else como se describió anteriormente resuelve el problema material, pero todavía hay un misterio con respecto a la interacción entre el par de configuraciones de términos .vimrc y
g:impact_transbg
.fuente
Intente configurar su
$TERM
variable de entorno de esta manera:También intente iniciar nvim de esta manera:
Si eso funciona, establezca la
$TERM
variable en su shell de forma permanente.fuente
xterm-256color
. Establecer $ TERM a través de la exportación no tuvo ningún efecto.Recientemente tuve este problema con el tema solarizado. El problema vino de la
TERM
variable env.Lo arreglé diciéndole a mi emulador de terminal (terminador en mi caso) que se ejecute en
env TERM=xterm-256color zsh
lugar de simplemente iniciar zsh como de costumbre.fuente