¿Cómo agregar un prefijo a cada línea?

35

Tengo el siguiente código:

Hello
There
I am some code

Y desea agregar código delante de él, como:

I said Hello
I said There
I said I am some code

Entonces, ¿cómo agregaría un prefijo a cada línea?

Luke
fuente

Respuestas:

47

Puede agregar un prefijo con M-x string-rectangle, que está vinculado a C-x r t. Esto es parte de una serie de comandos que opera en selecciones rectangulares ; éste inserta texto en cada línea del rectángulo.

Comience configurando la marca al comienzo de la primera línea y mueva el cursor al primer carácter de la última línea que desea prefijar:

*Hello
 There
▮I am some code

Luego use C-x r t, ingrese su prefijo ( I said) y presione RET. Esto agrega el texto a cada línea en el rectángulo:

I said Hello
I said There
I said I am some code

Si no alinea el cursor en la misma columna que su marca, sobrescribirá esa parte del rectángulo:

*Hello
 There
 I am▮ some code

con el mismo comando resulta en:

I said o
I said e
I said  some code
Tikhon Jelvis
fuente
3
eres la segunda persona en ganar una insignia de buena respuesta :)
nicael
Una alternativa es usar M-x string-insert-rectangle. Es muy similar, pero se string-insert-rectangle inserta al comienzo de cada línea de la selección, mientras que string-rectangle reemplaza , por lo que con este último debe ser más preciso sobre su selección si no desea sobrescribir nada.
Jeff Clites
32

Puede usar el modo de cursores múltiples para colocar un cursor en cada línea. Luego, cualquier texto que escriba se insertará en cada línea.

Comenzaría con el punto al comienzo del código:

▮Hello
 There
 I am some code

Luego golpea C->dos veces. (Esta es la combinación de teclas sugerida; debe configurarla usted mismo). Esto crea dos cursores adicionales en las siguientes dos líneas:

▮Hello
▮There
▮I am some code

Luego escribe I said. El texto se agregará en cada línea:

I said ▮Hello
I said ▮There
I said ▮I am some code

Finalmente presione RETpara salir del modo de cursores múltiples y dejar el punto en el último cursor:

I said Hello
I said There
I said ▮I am some code

Aquí hay un video que muestra cómo funciona.

legoscia
fuente
26

Personalmente, prefiero replace-regexp(reemplazar "^" con "dije").

artagnon
fuente
12

Otra opción es usar macros, que pueden manejar más tareas que las selecciones rectangulares o los cursores múltiples, incluso si es un poco más complicado para este caso específico.

Coloque el cursor al comienzo de la primera línea y presione F3para comenzar a grabar, inserte el texto, mueva el cursor al comienzo de la siguiente línea y presione F4para detener la grabación. Ahora presione F4nuevamente para repetir la macro, C-2 F4repetirla dos veces o C-0 F4repetirla hasta que se encuentre un error (como quedarse sin líneas).

sanityinc
fuente
9

Podrías instalar evil y hacerlo de varias formas similares a las de vi : prefiero la selección de bloques visuales usando Ctrl+ Vpara marcar cada línea y luego Shift+ Ipara insertar y luego escribir el texto que deseas insertar y finalmente presionar ESCpara salir del modo de inserción y el el texto se antepondrá a cada línea. Esto es muy similar a las selecciones de rectángulos de emacs pero algunas pulsaciones de teclas menos.

alexmurray
fuente
7

Esto es muy similar a la respuesta de artagnon, pero replace-regexpno está vinculado a ninguna clave.

Por lo tanto, en realidad uso el query-replace-regexpque está vinculado por defecto C-M-%y luego lo reemplazo ^con el prefijo dado I saidy luego escribo !para reemplazar todo sin preguntar más.

b4hand
fuente
4

Si ha cua-modehabilitado, entonces:

  • C-a para pasar al comienzo de la línea,
  • C-RET para comenzar el rectángulo,
  • (tecla abajo) dos veces para pasar a la tercera línea,
  • I said como texto a insertar
  • C-RET para terminar el rectángulo

Prefiero la cua-modeforma de trabajar, en comparación con el rectángulo estándar de Emacs donde el equivalente sería:

  • C-a para pasar al comienzo de la línea,
  • C-SPC para comenzar el rectángulo,
  • (tecla abajo) dos veces para pasar a la tercera línea,
  • C-x r t I said RET para insertar texto

El cua-modeguarda dos pulsaciones de teclas en comparación con el rectángulo estándar de Emacs.

Pero para mí, la ventaja adicional de cua-mode es que puedo agregar texto al rectángulo (personalmente no sé cómo agregar texto con el rectángulo estándar de Emacs). Con cua-mode, solo se RETpresiona una tecla, se inserta antes de I said.

Thdox
fuente