Mostrar espacios finales en vim

Mostrar espacios finales en vim

Me gustaría tener una visualización agradable y sencilla de espacios en blanco finales en el vim de mi terminal. Esto me permitiría eliminarlos antes de cerrar el archivo.

Soy consciente de que esta pregunta es bastante popular y ya encontré docenas de respuestas en SO. Desgraciadamente todavía no he encontrado ninguno que me satisfaga...

Así que intentaré resumir la información recopilada y las soluciones que encontré.

Solución 1: resaltar manualmente los espacios finales

highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()

Resaltar los espacios en blanco finales

Ventajas:

  • Fácil de usar
  • Rápido
  • Compatible concursorline

Contras:

  • El color elegido no es compatible con otros esquemas de color porque el color se establece manualmente enred
  • Los grandes bloques de fondo rojo no son muy estéticos.

Solución 2: usar la función de lista

set list
set listchars+=trail:◦

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Ventajas:

  • Fácil de usar
  • Rápido

Contras:

  • Problema si :set cursorlineestá habilitado
  • El color dedicado list/trailno es configurable. Tiene que ser igual que los otros listchars.

Solución 3: usar la función de ocultación

syn match WhiteSpace "\s\+$" containedin=ALL conceal cchar=◦
set conceallevel=2 
set concealcursor=nv
highlight Conceal ctermfg=red

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Ventajas:

  • Más bonita que la primera solución.

Contras:

  • El fondo no es el mismo que el fondo de la línea del cursor.
  • Puede interferir con otras reglas de ocultación
  • El color elegido no siempre es compatible con la combinación de colores.
  • No compatible con versiones anteriores de Vim

Mi pregunta

¿Cuál de las soluciones enumeradas es la más adecuada en términos de rendimiento y compatibilidad y cómo puedo obtener todas las ventajas y ninguna de las desventajas?

En otros términos, me gustaría encontrar una solución donde:

  • El color final resaltado coincide con el esquema de colores elegido.
  • Este color es claramente visible pero no demasiado agresivo para los ojos.
  • Compatible con cursorline(fondo y primer plano)`
  • Compatible con otros complementos que pueden usar ocultar
  • El carácter final se puede configurar en cualquier carácter Unicode.

Respuesta1

En términos de rendimiento, ninguno de estos debería marcar la diferencia. Vim en su mayor parte se atasca en patrones de sintaxis complejos; El patrón aquí es bastante simple.

Para que el color de resaltado coincida con el esquema de colores elegido, utilice :hi linkun grupo existente; Por lo general, eso sería Error. Por supuesto, todo esto sólo importa si cambias los esquemas de colores (bastante diferentes) con frecuencia; de lo contrario, usar colores adecuados directamente (como en su solución 1) también estaría bien.

Solución 1: resaltar manualmente los espacios finales

Yo optaría por esto, pero usando matchadd()en lugar de :match; esto deja este último para resaltar de forma personalizada. Además, clearmatches()es demasiado tosco; se eliminatodocoincide y, por lo tanto, puede afectar a los complementos. Puedes usar / echar un vistazo a miComplemento ShowTrailingWhitespacepara una implementación limpia y poderosa (que también incluye excepciones para ciertos tipos de archivos). Sí, es una solución mucho mayor, pero todavía no he notado ningún impacto.

Solución 2: usar la función de lista

Esta es una característica útil en sí misma y mantenerla activada permanentemente tiene efectos en la posición del cursor en los caracteres de tabulación, por lo que no la recomendaría.

Solución 3: usar la función de ocultación

Esto seguramente interferirá con algunas sintaxis y complementos que utilizan esta función. Mala idea.

información relacionada