¿Cómo reemplazar un personaje con una nueva línea en Emacs?

285

Estoy tratando de reemplazar un personaje, digamos ;, con una nueva línea usando replace-stringy / o replace-regexpen Emacs.

He intentado los siguientes comandos:

  • M-x replace-string RET ; RET \n

    Esto reemplazará ;con 2 caracteres: \n.

  • M-x replace-regex RET ; RET \n

    Esto da como resultado el siguiente error (que se muestra en el minibúfer):

    Uso no válido de `\ 'en el texto de reemplazo.

¿Qué hay de malo en usar replace-stringpara esta tarea? ¿Hay alguna otra forma de hacerlo?

Gracias.

Lei
fuente

Respuestas:

427

M-x replace-string RET ; RET C-q C-j.

  • C-qpara quoted-insert,

  • C-j Es una nueva línea.

¡Salud!

Jonathan Arkell
fuente
3
Cq es realmente lo quote-insertque cita al siguiente personaje.
Joe Casadonte el
2
Creo que en realidad es "citado" en lugar de "citar", como en "citar-insertar". Al menos así es en la versión 22.1.
Bryan Oakley
8
C-jes un 0x0acódigo de control literal , frente al Retcual es la clave junto a su cotización y envíos 0x0d. en.wikipedia.org/wiki/C0_and_C1_control_codes
Jonathan Arkell el
2
Nota para los usuarios de vim, utilizando C-jen emacs , mientras que C-men vim .
Alpha TAN el
2
@ JonathanArkell Esa es una descripción de cómo funciona, pero no por qué . Dentro del editor, Ret produce 0x0a, entonces, ¿por qué debería producir 0x0d en inserción entre comillas? Eso no tiene ningún sentido. (¿Solo porque el código interno del teclado es 0x0d por razones históricas? Usamos mapas de teclas por todo el lugar, ¿por qué no aquí donde tiene mucho sentido?)
vog
74

Hay cuatro formas en que he encontrado para poner una nueva línea en el minibúfer.

  1. C-o

  2. C-q C-j

  3. C-q 12 (12 es el valor octal de nueva línea)

  4. C-x oa la ventana principal, elimine una nueva línea con C-k, luego C-x oregrese al minibúfer, tírelo conC-y

slipmthgoose
fuente
10
+1 por mencionar C-o! Un golpe de tecla menos en comparación con C-q C-j. No había pensado en usar eso antes.
itsjeyd
¡Gracias por la versión 4! Útil si tienes un rebote de Co y Cq.
Joachim W
Muchas gracias. ¿Puedes explicar por qué Co funciona y Cq Cj no?
Christian Madsen
C-ono mueve el punto después de insertar la nueva línea en el minibúfer, por lo que también debe presionar la tecla de flecha derecha si desea insertar algo después de la nueva línea en la cadena de reemplazo.
Robin Green
En mi versión de Emacs 25.2.2, C-oingresaré una nueva línea en la ventana principal cuando utilizo la búsqueda, mientras C-q C-jque ingresaré la nueva línea en el minibúfer. C-ofunciona con consulta - sin embargo, reemplace.
TC Proctor
25

No olvides que siempre puedes cortar y pegar en el minibúfer.

Por lo tanto, puede copiar un carácter de nueva línea (o cualquier cadena) de su búfer y luego tirarlo cuando se le solicite el texto de reemplazo.


fuente
2
Es realmente una buena idea para los personajes que no conozco la combinación de teclas.
Lei
Ah ah ! tan sencillo !
Jérémy Pouyet
8

Más explícitamente:

Para reemplazar el carácter de punto y coma (;) con una nueva línea, siga estos pasos exactos.

  1. ubique el cursor en la esquina superior izquierda del búfer que contiene el texto que desea cambiar
  2. Escriba mx replace-string y presione RETURN
  3. el mini-buffer mostrará algo como esto: Reemplazar cadena (por defecto ^ ->):
  4. Escriba el carácter que desea reemplazar. En este caso, ; y pulsa RETORNO
  5. el mini-buffer mostrará algo como esto: string; con:
  6. Ahora ejecuta Cq Cj
  7. Todas las instancias de punto y coma serán reemplazadas por una nueva línea (desde la ubicación del cursor hasta el final del búfer aparecerá ahora)

Un poco más de lo que dice la explicación original.

afc
fuente
2

Cambiar al modo de texto

M-x text-mode

Resaltar bloque para sangrar

Sangrar

C+M \

Regrese a cualquier modo.

enkdr
fuente
0

solo en línea: C-M-S-%(si las teclas de enlace siguen siendo predeterminadas) replace-string^J

Aiad Faris
fuente