¿Cómo borrar los primeros n caracteres de cada línea?

15

Recientemente pregunté:

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

Así que ve desde el siguiente código:

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

Para codificar como:

Hello
There
I am some code

Ahora, ¿cómo elimino un número n de caracteres de una línea?

Luke Shimkus
fuente
En mi humilde opinión es lo mismo que su pregunta anterior.
A_P

Respuestas:

28

¡Es aún más fácil! Nuevamente, use comandos de rectángulo . Muévase a una esquina del rectángulo que desea eliminar, presione C-SPCpara establecer la marca. Muévase a la otra esquina del rectángulo y presione C-x r d( delete-rectangle). Por ejemplo, muévase a la primera línea en la que desea actuar, presione C-ao homepara ir al principio de la línea, baje a la última línea en la que desea actuar, vaya a la esquina inferior derecha y luego elimine.C-u number C-fC-x r d

Si la última línea tiene menos de la cantidad deseada de caracteres, puede ser más conveniente usar las esquinas inferior izquierda y superior derecha. Alternativamente, puede insertar caracteres basura (esto es útil si la primera línea y la última línea son más cortas).

Puede usar C-x r kpara eliminar el rectángulo, lo que le permite tirar ( C-x r y) más tarde (moverse a la esquina superior izquierda del lugar donde desea insertarlo).

También puede usar C-x r t( string-rectangle) e ingresar una cadena vacía.

Los comandos de rectángulo se basan en posiciones de columna. Si desea eliminar n caracteres, en lugar de n columnas (lo que hace la diferencia con los caracteres de varias columnas, como las pestañas), puede usar el reemplazo de expresiones regulares : reemplace ^.\{42\}por nada para eliminar los primeros 42 caracteres de cada línea.

Gilles 'SO- deja de ser malvado'
fuente
3
en lugar de intentar recordar todos los comandos de rectángulo, también puede usar Cx spc, en lugar de C-spc, que convierte su región en un rectángulo y todo funciona.
Malabarba
1
@Malabarba Solo desde Emacs 24. (Escribiendo esto en una máquina con Emacs 23. Todavía están muy cerca.)
Gilles 'SO- deja de ser malvado'
2
Mis condolencias ... :-(
Malabarba
Esto me funcionó en GNU Emacs 23.4.1 (x86_64-pc-linux-gnu, GTK + Versión 2.24.21) de 2013-10-25 en allspice, modificado por Debian
davidrmcharles
4

Otra posibilidad: realmente me gusta usar múltiples cursores para tareas como esta. Disponible en package.elvia MELPA, se ha convertido en una parte indispensable de mis emacs. Simplemente seleccionaría I said(y posiblemente incluiría el salto de línea antes), usar M-x mc/mark-all-like-thisy seguir mi camino. Si desea un control más detallado, puede usar mc/mark-next-like-thiso mc/mark-next-lines.

Mis combinaciones de teclas:

(use-package multiple-cursors
  :bind (("C->"   . mc/mark-next-like-this)
         ("C-M->" . mc/mark-all-like-this-dwim)))

¡Las rocas obligatorias de Emacs! episodio: http://emacsrocks.com/e13.html

Sean Allred
fuente
3

Si ha cua-modehabilitado, entonces:

  • C-a para pasar al comienzo de la línea,
  • C-RET para comenzar el rectángulo,
  • Luego muévase con las teclas de flecha o cualquier comando de movimiento de emacs como C-f
  • DEL para eliminar la selección

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,
  • Luego muévase con las teclas de flecha o cualquier comando de movimiento de emacs como C-f
  • C-x r d para eliminar la selección

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

Thdox
fuente
3

En aras de la exhaustividad: la eliminación de los primeros 3 caracteres de cada línea (formalmente: desde el punto en adelante o en la región) se puede hacer regexp-reemplazando ^...(o más generalmente:) ^.\{3\}con una cadena vacía.

Explicación: en regexen, ^significa "comienzo de línea", .significa "cualquier carácter" y \{n\}significa " n repeticiones de la cosa anterior".

Esto tiene un beneficio adicional de ser interactivo (a menos que uno presione !, lo que hace que query-regexp-replacereemplazar todo de ahora en adelante sin más preguntas).

mbork
fuente
1
¿Por qué los votos negativos?
mbork
0

Y una posibilidad más:

F3C-aC-3C-dC-nF4

graba una macro de teclado, que dice básicamente "moverse al comienzo de la línea, eliminar tres caracteres y pasar a la siguiente línea". Luego, puede reproducirlo hasta el final del búfer C-uF4, o C-xC-kraplicarlo a las líneas en la región. Esto tiene una desventaja: se romperá cuando cualquier línea tenga menos de 3 caracteres.

mbork
fuente
-1

Si es solo una línea, puedes zap-to-char con Mz asumiendo que el carácter no se repite entre el punto y el que deseas eliminar. En algunos casos, esto es más rápido que crear una región.

Willyfrog
fuente