¿Qué hace: set background = dark do?

35

No puse color xxxen mi .vimrc. Así que veo esto cuando abro mi .vimrc.

:colorme da defaultaquí Antes que nada

Entonces escribo :color darcula. Y cambia a esto.

:colorme da darculaaquí (naturalmente) Cambiar esquema de colores

Entonces escribo :set background=dark. Y cambia a esto.

:colorme da defaultaquí (asombrosamente) Cambiar el fondo

Entonces mi pregunta es, ¿qué hace exactamente :set background=dark?

Lo intenté :h backgroundy no encontré nada útil. Entiendo que este comando en realidad no cambia el fondo, solo vim cambiará los colores en consecuencia. Pero todavía quiero hacer esta pregunta. Porque yo estoy muy contento con el color después :color darculay :set background=darklo que me pregunto cómo escribir mi propio esquema de color sin tener que poner set background=darken mi .vimrc.

Seguí el consejo de @statox y lo puse set background=darken la última línea de mi darcula.vim. Luego color darculame da la tercera captura de pantalla. Sin embargo, cuando lo puse en la primera línea, color darculame da la segunda captura de pantalla. También lo set bg=darkcambia a la tercera captura de pantalla.

Supuse que al ponerlo en la primera línea, le digo a Vim que este esquema de colores está diseñado para un fondo oscuro. Al ponerlo en la última línea, en el contraste, dejo que supongo que este esquema de colores está diseñado para un fondo claro y luego hago que cambie un poco por sí mismo (cuando procesa la última línea).

Si lo que supongo que sucedió es cierto, mi pregunta sigue sin respuesta. ¿Qué cambió exactamente vim cuando uso set bg=darkDESPUÉS de que ha cargado un esquema de colores claros?

Toda mi configuración de vim está disponible en https://github.com/MichaelMa2014/.vim

Michael Ma
fuente
@muru Saludos! Había leído esta pregunta antes de preguntar la mía. En esa publicación se menciona que :set bg=lighty :set bg=darkno son opuestos, pero no se explica qué son exactamente. También esa publicación es la razón por la que quiero evitar :set background=darken mi .vimrc.
Michael Ma

Respuestas:

32

Que pasa cuando tu :set background

El mecanismo básico por el cual :set backgroundfunciona es en realidad bastante simple, y está documentado (aunque no de forma particularmente clara) en :help 'background'.

Cuando se establece 'fondo', Vim ajustará los grupos de colores predeterminados para el nuevo valor. Pero los colores utilizados para resaltar la sintaxis no cambiarán. g: colors_name
Cuando se carga una combinación de colores (se establece la variable "g: colors_name") al establecer 'fondo', la combinación de colores se volverá a cargar. Si el esquema de color se ajusta al valor de 'fondo', esto funcionará. Sin embargo, si el esquema de color establece el "fondo" en sí mismo, el efecto puede deshacerse.

Entonces, lo que realmente sucede cuando 'background'se cambia la opción es esto:

Si no hay una combinación de colores cargada actualmente

Vim vuelve a cargar los colores predeterminados, utilizando colores de primer plano que se consideran apropiados para la nueva configuración de 'background'

Si un esquema de color está cargado actualmente

Vim vuelve a cargar el esquema de color. Cuando se carga el esquema de color, el esquema de color establece los colores apropiados para la nueva configuración 'background'o el esquema de color se restablece 'background' al valor anterior.

Como ya ha descrito, la 'background'opción no pretende establecer el fondo, sino informar a Vim si el fondo es oscuro o claro.

Entonces, si el esquema de color se restablece 'background', Vim entiende que el esquema de color simplemente no admite la nueva configuración de 'background'. Dado que el usuario ha indicado que está utilizando dicho fondo, esto significa que el esquema de color actual ya no es apropiado, por lo que Vim desactiva g:colors_namey luego vuelve a cargar los colores predeterminados.

Si desea explorar el código real que se ejecuta cuando 'background'está configurado, puede comenzar aquí .

¿Qué está pasando en tu instalación?

El comportamiento extraño que describe (en la primera versión de su pregunta) puede explicarse mediante esta línea en la documentación citada anteriormente:

Cuando se carga un esquema de color (se establece la variable "g: colors_name")

El problema es que su colors/darcula.vimarchivo no establece este valor, por lo que a pesar de que los colores cambiaron cuando lo invocó :color darcula, Vim no considera que se cargue un esquema de color actualmente.

Por lo tanto, cuando llame a :set background=darkVim, lleve a cabo el paso de la sección anterior "Si no hay una combinación de colores cargada actualmente" y establece los colores predeterminados para un fondo oscuro. Esto explica por qué :colorluego informa default.

(Tenga en cuenta, sin embargo, que la configuración de los colores predeterminados no elimina , como es de esperar, todos los colores que se habían configurado previamente, y es por eso que termina con los resultados que ve, en lugar de los colores que se muestran cuando iniciar Vim en primer lugar. Aquí hay una discusión sobre este tema )

En resumen, su esquema de color está mal configurado: consulte :edit $VIMRUNTIME/colors/README.txt(en particular la sección en la parte inferior) para obtener más detalles sobre esto y sobre la interacción entre 'background'los esquemas de color.

Rico
fuente
Muchas gracias! Me siento completamente comprendido cuando dices que "no, como es de esperar, elimina todos los colores que se habían configurado previamente". ¡Seguramente iré a leer las discusiones!
Michael Ma
4

El documento de at :h 'background' debe proporcionar toda la información que necesita:

Cuando se establece en "oscuro", Vim intentará usar colores que se vean bien en un fondo oscuro. Cuando se establece en "claro", Vim intentará usar colores que se vean bien sobre un fondo claro. Cualquier otro valor es ilegal.

Su esquema de colores define 2 grupos de colores: los que se usan en un fondo claro y los que se usan en un fondo oscuro. La backgroundopción le dirá a vim qué grupo de colores definido por su esquema de colores debe usarse.

Establecer esta opción no cambia el color de fondo, le dice a Vim cómo se ve el color de fondo. Para cambiar el color de fondo, vea :h :hi-normal.

Cuando se establece 'fondo', Vim ajustará los grupos de colores predeterminados para el nuevo valor. Pero los colores utilizados para resaltar la sintaxis no cambiarán.

Ese es el seguimiento del párrafo anterior: es el esquema de colores que define los grupos de colores y backgroundselecciona uno de estos grupos.

Finalmente, si desea escribir su propio esquema de colores sin tener que poner set background=darksu vimrc, recuerde que un esquema de colores no es más que un programa en vimscript, por lo que nada le impide usar el comando directamente en el código de su esquema de colores como, por ejemplo, jellybeans o aprendiz

statox
fuente
1
¡Gracias! Pongo set background=darken darcula.vimy produjo el mismo efecto que cuando lo pongo en .vimrc. Pero todavía tengo curiosidad, ¿cómo exactamente Vim "trata de usar colores que se vean bien en un fondo oscuro"? ¿Hay un mapeo o algo así definido en alguna parte?
Michael Ma