Vi a un hábil vim ninja 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 sería si el resaltado ocurriera en líneas consecutivas, pero solo considere la primera palabra (no la línea completa).
Se utiliza un segundo ajuste si el resaltado se puede configurar para diferentes colores en función del número de líneas coincidentes (o las palabras que dependen de AB están activas). Por lo tanto, solo tenemos dos líneas consecutivas que coinciden con verde, 3-5 líneas consecutivas, luego naranja, 6+ y luego rojo.
syntax-highlighting
highlight
Martin York
fuente
fuente
Respuestas:
Los siguientes
match
conjuntos parecen funcionar para (A):Parece que el orden es crucial aquí. Si las coincidencias
Low
oMedium
vienen despuésCritical
, quedan subsumidas por los requisitos más flexibles de estas, y de manera similar paraLow
wrtMedium
.El resaltado no aparece inmediatamente después de agregar, digamos, una tercera o sexta línea de duplicación, pero una vez que se mueve un poco después de agregarlas. No estoy seguro de qué lo desencadena, exactamente.
Para B, imagino que podrías reemplazar la expresión regular con:
En general, reemplace todo
(.*)
con(\S+).*
y\1
con\1.*
, o lo que sea que sea una palabra para usted.fuente
Como punto de partida, aquí hay un patrón de búsqueda que coincide con líneas duplicadas (ignorando los cambios en los espacios en blanco iniciales):
:help pattern
proporcionará más información sobre cómo hacer expresiones regulares como esta:help syntax
le mostrará cómo tomar esta expresión regular y convertirla en algo resaltado para ustedAprender a escribir scripts de sintaxis puede ser difícil, por lo que una buena solución a corto plazo es hacer esto 'sobre la marcha' asegurándose de que
'incsearch'
esté configurado para que las búsquedas estén resaltadas y mapear una clave para hacer la búsqueda anterior, es decirnnoremap <F5> /^\s*\(.\+\)\n\zs\(\s*\1\n\)\+<CR>
fuente
yy10p
en la línea con la expresión regular completa y luego seleccionar las partes que desea eliminar y presionarr<space>
. Tal vez agregue un comando para 'reemplazar todo excepto la selección en esta línea con espacios' para acelerar un poco las cosas.,r
luego una las líneas juntas<space>
en modo normal / visual.