Color de primer plano SpecialKey con conjunto de cursor


9

En estas preguntas y respuestas , se observa que hay un grupo resaltado para CursorLineNr, que se aplica al número de línea de la línea del cursor cuando set cursorlineestá activado.

Noté que el uso de la línea del cursor también cambia el color para otro grupo de resaltado SpecialKey, que se aplica si tiene, por ejemplo:

 set list listchars=tab:\|_,trail:-

El problema con esto para mí es que uso un fondo oscuro (y, por lo tanto, una línea de cursor oscura). Mi SpecialKeyconfiguración normal también es muy oscura, por lo que los listcharsímbolos son solo marginalmente visibles. Pero usarlos cursorline son blancos , lo que hace que el trailpersonaje no se distinga de haber golpeado realmente -. El carácter de rastro se usa cada vez que escribe un espacio al final de una línea, por lo que esto es más que un problema menor; Por lo general, escribir una línea de principio a fin implica una cantidad de espacios que deben distinguirse fácilmente de un error tipográfico de guión mientras se trabaja (o viceversa, un error tipográfico de espacio cuando se pretendía un guión).

Dado que ninguno de los otros grupos destacados parece verse afectado, CursorLineNrpresumiblemente se está aplicando algo así , pero al mirar la hilista no veo nada apropiado.

¿Alguien sabe qué es esto? Mejor aún, ¿alguien sabe de alguna manera de modificar algún grupo resaltado para la línea del cursor?


2
Solo resalto la línea del cursor brevemente después de haber saltado 2 o más líneas. Cuando estoy editando texto, la línea del cursor está desactivada. Si puede acostumbrarse a ese comportamiento, podría mitigar su problema.
joeytwiddle

Respuestas:


8

He estado luchando con ese comportamiento durante mucho tiempo.

Básicamente, el color de primer plano de SpecialKeyla línea actual se cambia al color de primer plano de Normalif:

  • la cursorlineopción está habilitada
  • el CursorLinegrupo resaltado tiene un conjunto de colores de fondo.

Nunca he podido arreglar ese comportamiento, no importa lo que haya intentado. El problema radica en algún lugar del código fuente de Vim.


1
¡Esa no es la respuesta que quería! He cambiado mi rastro de caracteres a ~un poco menos confuso (también podría buscar algunos caracteres oscuros unicode para usar).
Ricitos

Vi este comportamiento incluso sin un color de fondo para el grupo CursorLine. Traté de deshabilitarlo (es decir none), traté de dejar su valor predeterminado (estaba subrayado), los espacios aún cambiaron su color de primer plano
user907860

2

Lo que funcionó para mí fueron las siguientes líneas en mi .vimrc(basado en la respuesta de Igor Mikushkin ).

autocmd BufNewFile,BufRead * call matchadd('SpecialKey', '\s\+')
autocmd BufNewFile,BufRead * call matchadd('NonText', '\n\+')

VimEntersolo funciona para el primer archivo que abras, no para los archivos / pestañas que abras después. BufNewFile,BufReadHasta ahora ha funcionado para todos los buffers que he abierto.

La primera línea cubre los espacios en blanco. Vim los destaca en el SpecialKeygrupo, por lo que les aplicamos esos estilos.

La segunda línea cubre nuevas líneas. Vim los destaca en el NonTextgrupo, por lo que les aplicamos esos estilos. Realmente solo necesita la segunda línea si sus NonTextcaracteres están resaltados de manera diferente a los SpecialKeycaracteres.


Esta debería ser la respuesta.
hozza

1

Las siguientes líneas en .vimrc me solucionaron el problema.

au VimEnter * call matchadd('SpecialKey', '^\s\+', -1)
au VimEnter * call matchadd('SpecialKey', '\s\+$', -1)

Invalida la aplicación de otros estilos para pestañas y espacios finales dentro de una línea de cursor.


¿Por qué está almacenando el matchadd()resultado en una variable, si no lo usa?
Christian Brabandt

@ChristianBrabandt Gracias, ya está arreglado.
Igor Mikushkin

Esto también funciona para mí usando NeoVim.
Hakunin

0

Existe otra "solución", en realidad una especie de error para este problema.

Tengo grupos de sintaxis personalizados para cosas como "listchars".

Me gusta esto:

hi WhiteSpaceChar ctermfg=251 guifg=#999999
call matchadd("WhiteSpaceChar", "[ \t]")

Podrías hacer algo como esto (aunque no lo probé):

hi TrailChar ctermfg=251 guifg=#999999
" the \v in the regex is Vim's flag to use Perl-like regex syntax
call matchadd("TrailChar", "\v +$")

Pero hay al menos dos problemas con este enfoque:

  1. cuando divide una ventana, o crea una nueva pestaña, etc., el resaltado se rompe en la ventana actual, así:

el resaltado de espacios en blanco se rompe cuando se abre una nueva ventana

Para solucionar esto tengo funciones especiales como:

fun! ResetHiglightJS()
  set syntax=javascript
  "these are for the IndentLine plugin
  "IndentLinesDisable
  "IndentLinesEnable
endfun

para cada grupo de sintaxis, que uso con frecuencia, para corregir el resaltado manualmente. Puede hacerlo de otra manera, como los comandos automáticos o establecer manualmente el valor de la opción de sintaxis. Para que el restablecimiento de la sintaxis funcione, uno también debe tener esto:

call matchadd("WhiteSpaceChar", "[ \t]")

en cada archivo de sintaxis correspondiente, como ~/.vim/after/syntax/javascript.vim

  1. Este enfoque no funciona normalmente con al menos un complemento, el IndentLine, por lo que me vi obligado a seguir una versión anterior al configurarlo manualmente let g:indentLine_newVersion = 0, donde el complemento funcionaba normalmente.

Pero de otra manera, este enfoque funciona normalmente sin el complemento IndentLine:

los espacios en blanco tienen un color deseado en la línea del cursor

Y aceptable con eso:

indent Color de línea en la línea del cursor

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.