Me gustaría tener una agradable y dulce exhibición de espacios en blanco al final de mi terminal vim. 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. Lamentablemente no encontré uno satisfactorio todavía ...
Por lo tanto, 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()
Pros:
- Fácil de usar
- Rápido
- Compatible con
cursorline
Contras:
- El color elegido no es compatible con otros esquemas de color porque el color se configura manualmente en
red
- Los grandes bloques de fondo rojo no son muy estéticos.
Solución 2: uso de la función de lista
set list
set listchars+=trail:◦
Pros:
- Fácil de usar
- Rápido
Contras:
- Problema si está
:set cursorline
habilitado - El color dedicado para
list/trail
no es configurable. Tiene que ser igual a los otros listchars
Solución 3: uso de la función de ocultación
syn match WhiteSpace "\s\+$" containedin=ALL conceal cchar=◦
set conceallevel=2
set concealcursor=nv
highlight Conceal ctermfg=red
Pros:
- Más bonita que la primera solución.
Contras:
- El fondo no es lo 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 el esquema de color.
- No es compatible con la versión anterior 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 desventajas?
En otros términos, me gustaría encontrar una solución donde:
- El color final resaltado concuerda 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 establecer en cualquier carácter Unicode
:hi link ExtraWhitespace CursorLine
. Ver:help hi-link
.Respuestas:
En términos de rendimiento, ninguno de estos debería marcar la diferencia. Vim se atasca principalmente por patrones de sintaxis complejos; El patrón aquí es bastante simple.
Para que el color de resaltado concuerde con el esquema de colores elegido, use
:hi link
para un grupo existente; por lo general, eso seríaError
. Por supuesto, todo esto solo importa si cambia 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.Iría por esto, pero usando en
matchadd()
lugar de:match
; esto deja a este último para resaltado personalizado. Además,clearmatches()
es demasiado grueso; elimina todas las coincidencias y, por lo tanto, puede afectar a los complementos. Puede usar / echar un vistazo a mi complemento ShowTrailingWhitespace para una implementación limpia y potente (que también incluye excepciones para ciertos tipos de archivos). Sí, es una solución mucho más grande, pero aún no he notado ningún impacto.Esta es una característica útil en sí misma, y mantenerla permanentemente tiene efectos en la posición del cursor en los caracteres de Tabulación, por lo que no lo recomendaría.
Eso seguramente interferirá con algunas sintaxis y complementos utilizando la función. Mala idea.
fuente
'listchars'
. Para mí, el resaltado es más que suficiente (especialmente con colores agresivos).