Pregunta:
Vi a un experto ninja vim hacer esto hace un tiempo, pero no tengo idea de dónde comenzar.
A) ¿Hay alguna manera de configurar el color de fondo de vims para que las líneas consecutivas con contenido idéntico se resalten?
B) Si alguien sabe cómo hacer eso, un buen ajuste a esto sería si el resaltado ocurriera en líneas consecutivas pero solo considere la primera palabra (no toda la línea).
Se utiliza un segundo ajuste si el resaltado se puede configurar en diferentes colores en función del número de líneas coincidentes (o palabras según AB esté activo). Entonces, solo tenemos dos líneas consecutivas que coinciden con el verde, 3-5 líneas consecutivas luego naranja, 6+ luego rojo.
Respuesta:
Los siguientes conjuntos de match
parecen funcionar para (A):
:syn match Low /\v(.+)\n(\1\n)/
:syn match Medium /\v(.+)\n(\1\n){2,4}/
:syn match Critical /\v(.+)\n(\1\n){5,}/
:hi Critical ctermfg=red
:hi Medium ctermfg=yellow
:hi Low ctermfg=green
Parece que el orden es crucial aquí. Si las coincidencias Low
o Medium
vienen después de Critical
, quedan subsumidas por los requisitos más flexibles de estas, y de manera similar para Low
wrt Medium
.
El resaltado no aparece inmediatamente después de agregar, digamos, una tercera o sexta línea duplicada, sino una vez que se mueve un poco después de agregarlos. No estoy seguro de qué lo desencadena, exactamente.
Para B, imagino que podrías reemplazar la expresión regular con:
/\v(\S+).*\n(\1.*\n)/
En general, reemplace todo el (.*)
Con (\S+).*
Y \1
con \1.*
, o lo que sea que constituya una palabra para usted.