NeoVim True colors

Hola,

Ayer, después un año investigando (no muy bien por lo que he visto finalmente) he conseguido configurar NeoVim para que utilice true colors. La última vez que me puse con esto lo di por imposible pero he vuelto a ello porque he añadido un ColorColumn y necesitaba que tuviera un color más oscuro.

Resulta que no era para nada difícil pero no sé por qué me costó tanto en el pasado.

Antes de empezar NeoVim es una extensión de VIM para añadir alguna funcionalidad extra que seguramente nunca se verán en VIM. Os dejo la página del proyecto y vosotros investigáis.

Ahora al lío.

Para que soporte true colors hay que tener una variable de entorno activada: NEOVIM_TUI_ENABLE_TRUE_COLOR. Que se puede hacer en la propia terminal con un export o haciendo un let en la configuración de NeoVim.

En muchos sitios pone que esta configuración es suficente pero no es cierto. NeoVim necesita más cosas para que los true colors se vean. Si se añade :set termguicolors empezará a funcionar como debe. Esto es un bypass muy loco que hace que la terminal utilice los colores de la GUI.

En Vim hay dos modos de trabajo: el clásico de la terminal y el de la GUI. GUI implica que hay una aplicación de escritorio con sus ventanitas y eso que muestra Vim (gvim, por ejemplo). Los colores de una a la otra opción son diferentes porque se supone que la terminal no es capaz de manejar los mismos colores que una interfaz gráfica, pero eso ya no es del todo cierto. Muchos terminales modernos soportan true colors por lo que pueden usar los colores que, en principio, están hechos para mostrarse en la GUI.

NeoVim sabe esto así que diciéndole que use los colores de la GUI en la terminal lo hará y tendremos los true colors. Otro problema es que muchos esquemas de color comprueban si se está utilizando el modo GUI o el de terminal para decidir qué esquema utilizan (el complejo o uno simplificado especial para la terminal). Esa comprobación se hace con has('gui_running'), cuidado con eso. Hay algunos esquemas de color que son para true colors y algunos no lo comprueban y funcionarán bien (ejemplo).

Ya que estaba me decidí también por buscar otras opciones similares. Existe una muy chula que te cambia la forma del cursor dependiendo del modo en el que estés. Usa el cuadradito para modo normal, un subrayado del carácter en el modo reemplazar y una barrita vertical que se sitúa entre caracteres en el modo insertar. De esta manera tenemos un pequeño apoyo visual al trabajar. Esto se activa con NVIM_TUI_ENABLE_CURSOR_SHAPE que igual que la de antes de “enable true color” se puede setear como variable de entorno en la terminal o con un let dentro de la configuración de NeoVim.

Otro día os hablo más de NeoVim e incluso puede que haga una especie de manual a mi manera. Pero eso otro día.

Os dejo con el patch que he aplicado a mi configuración:


" Enable TRUE COLORS
+let $NVIM_TUI_ENABLE_TRUE_COLOR=1
+let $NVIM_TUI_ENABLE_CURSOR_SHAPE=1
+set termguicolors

" Highlight where the lines are more than 80 characters wide
set colorcolumn=80
-highlight ColorColumn ctermbg=DarkGrey
+highlight ColorColumn ctermbg=DarkGrey guibg=#262626

Como veis en el ColorColumn, ahora aplico el guibg=#262626 que es un gris bastante oscuro en su color RGB. Al estar aplicado el termguicolors utilizará ese color también en la terminal.

¡Conseguido!

Probad y me decís.


PD: Os dejo mis dotfiles para que veáis mi configuración entera: https://github.com/ekaitz-zarraga/dotfiles

Anuncios

Un pensamiento en “NeoVim True colors

  1. NeoVim True colors | PlanetaLibre

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s