Pregunta

Digamos que tengo una línea en un buffer de emacs que se ve así:

foo -option1 value1 -option2 value2 -option3 value3 \
    -option4 value4 ...

Quiero que se vea así:

foo -option1 value1 \
    -option2 value2 \
    -option3 value3 \
    -option4 value4 \
    ...

Quiero cada par de opción/valor en una línea separada.También quiero que esas líneas posteriores tengan una sangría adecuada según el modo en lugar de agregar una cantidad fija de espacios en blanco.Preferiría que el código funcione en el bloque actual, deteniéndose en la primera línea que no esté en blanco o en la primera línea que no contenga un par de opción/valor, aunque podría conformarme con que funcione en una región seleccionada.

¿Alguien sabe de una función elisp para hacer esto?

¿Fue útil?

Solución

Nadie tenía lo que buscaba así que decidí desempolvar mi manual de elisp y hacerlo yo mismo.Esto parece funcionar bastante bien, aunque el resultado no es precisamente el que pedí.En esta versión, la primera opción va sola en una línea en lugar de permanecer en la primera línea como en mi pregunta original.

Otros consejos

En este caso usaría una macro.Puede comenzar a grabar una macro con C-x (y dejar de grabarla con C-x).Cuando desee reproducir la macro, escriba C-x e.

En este caso, escribiría C-a C-x ( C-s v a l u e C-f C-f \ RET SPC SPC SPC SPC C-x )

Eso registraría una macro que busca "valor", avanza 2, inserta una barra diagonal y una nueva línea, y finalmente espacia la nueva línea para alinearla.Luego podrías repetir esta macro varias veces.

EDITAR:Me acabo de dar cuenta de que es posible que su texto literal no sea tan fácil de buscar como "valor1".También puedes buscar espacios y recorrer los resultados.Por ejemplo, presionar C-s varias veces después del primer partido para saltarse algunos de los partidos.

Nota:Dado que su ejemplo es "ad-hoc", esta solución también lo será.A menudo utiliza macros cuando necesita una solución ad hoc.Una forma de hacer que la macro se aplique de manera más consistente es poner la declaración original en una sola línea (también se puede hacer mediante una macro o manualmente).

EDITAR:Gracias por el comentario sobre ( versus C-(, ¡tenías razón, error!

Personalmente, hago cosas como esta todo el tiempo.

Pero no escribo una función para hacerlo a menos que lo haga todos los días durante un año.

Puedes hacerlo fácilmente con query-replace, así:

m-x (consulta-reemplazar "-opción" "^Q^J -opción")

Digo ^q ^j ya que eso es lo que escribirás para citar una nueva línea y ponerla en la cadena.

Luego, simplemente presione 'Y' para que las cuerdas reemplacen, y 'n' para omitir los casos de esquina extraños que encontraría.

Otra función de caballos de batalla es la re-reemplazo-regexp que puede hacer reemplazos de expresiones regulares.

y también GREP-Query-Replace, que realizará la reemplazo de consultas analizando la salida de un comando GREP.Esto es útil porque puede buscar "foo" en 100 archivos, luego hacer la reemplazo de consultas en cada ocurrencia omitiendo el archivo en el archivo.

Es posible que su modo ya admita esto.En el modo C y en el modo Makefile, al menos, M-q (párrafo de relleno) insertará continuaciones de línea en la columna de relleno y ajustará sus líneas.

¿En qué modo estás editando esto?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top