¿Cómo cambiar un área de texto seleccionada en Emacs por un cierto número de espacios?

26

Estoy escribiendo código de Python, por lo que cambiar / mover bloques de líneas es importante para evitar pasar por cada línea individualmente. ¿Cómo puedo hacer esto sin un complemento? ¿Hay algún tipo de comando de pulsación de teclas para hacer esto?

Vass
fuente
3
Para obtener respuestas no específicas de Python, consulte emacs.stackexchange.com/q/11 y emacs.stackexchange.com/q/18 .
legoscia

Respuestas:

40

Use el comando indent-rigidly, que está vinculado C-x TABde forma predeterminada.

Puede especificar el número de espacios para sangrar utilizando un argumento prefijo , como C-5 C-x TAB.

O puede invocar el comando y luego usar las flechas izquierda / derecha para ajustar interactivamente el nivel de sangría.

glucas
fuente
¿Cómo se agrega un argumento prefijo?
Vass
1
Intente, por ejemplo, C-5 C-x TABsangrar la región actual 5 espacios.
glucas
genial, pero ¿por qué la primera línea no se mueve tan bien? Tengo que tomar la última parte de la línea sobre la selección para hacer que se mueva el conjunto de líneas.
Vass
1
No debería necesitar seleccionar nada de la línea anterior, pero sí desea seleccionar desde el principio de la primera línea que desea sangrar. Por ejemplo, C-apara moverse al comienzo de la línea, C-SPCpara comenzar a marcar la región, C-n C-npara moverse hacia abajo un par de líneas, C-5 C-x TABpara sangrar esas dos líneas.
glucas
1
"use las flechas izquierda / derecha para ajustar interactivamente el nivel de sangría" ¿En serio? ¡Excelente! No lo sabía, y a veces tenía que adivinar cuántos espacios necesitaba agregar o quitar. Espero que esto pueda ayudar.
imz - Ivan Zakharyaschev
9

Si se utiliza python-mode.el C-c >o C-c <para desplazar bloques hacia la izquierda o hacia la derecha

Lompik
fuente
¿Cómo es que la primera línea de la selección no se mueve si no selecciono la última parte de la línea que está arriba?
Vass
No puedo reproducir este comportamiento. todas las líneas de una selección se mueven. Emacs 24.4
Lompik
El comentario de glucas dice que esto sucederá si no selecciona desde el principio de la línea
Vass
6

El string-rectanglecomando ( C-x r t) se puede usar para insertar cualquier texto arbitrario (espacios incluidos) en una región seleccionada.

Supongamos que tiene este bloque de texto y desea insertar 5 espacios delante de todas las líneas.

abc
  def
    ghi

Primero seleccione una región de "columna 0" como se muestra a continuación (el punto está en el carácter 'a' y la marca está en la misma columna en la fila que contiene 'ghi':

▮bc
  def
▯   ghi

Ahora usando string-rectangle, inserte el texto que desea insertar en la región seleccionada. En este ejemplo, estaremos insertando 5 espacios en todas las filas, incluyendo y entre el punto y la marca.

C-x r t M-5 SPC RET

Eso dará el texto sangrado de la fuerza a continuación.

     abc
       def
         ghi
Kaushal Modi
fuente
4

Hay C-x TAB(obligado a indent-rigidly). Dele un argumento prefijo para indicar cuántos espacios desea sangrar, negativo elimina esa cantidad de espacios.

Harald Hanche-Olsen
fuente
0

Descubrí que presionando Alt-4 y luego SPC, obtengo el resultado deseado. No estoy seguro si esta es la mejor manera, pero también funciona.

Vass
fuente