emacs: ¿cómo sangrar / desangrar la región del código python por 4 espacios?

60

Tengo una región de código python seleccionada en emacs. ¿Cuáles son las formas más eficientes de sangrar y desangrar cada línea en 4 espacios?

Idealmente, me gustaría algo que no sea sensible al contexto (por ejemplo, me permitirá sangrar pasajes dentro de cadenas de documentos donde la sangría no se relaciona con la sintaxis de Python).

Mi línea de modo muestra (Python). Al buscar en la web, encontré muchas discusiones sobre el uso en python-modelugar de python, pero solo comencé a usar emacs hace unos días, así que tengo cuidado de cambiar los valores predeterminados antes de tener la oportunidad de entenderlos. Si cambiar a python-modees la mejor opción, estoy feliz de aceptar eso como respuesta.

Lo que he probado (del manual):

  • <TAB> sin efecto
  • C-M-\ sin efecto
  • C-x <TAB> (sangría-rígidamente) sangra cada línea por una columna (y deselecciona la región)
  • M-i sangra una primera línea por una pestaña (longitud de 8 espacios)
  • C-M-q - "CMq no está definido"

La única forma en que he encontrado es usando regex-replace, pero esa es una cantidad horrible de pulsaciones de teclas para una tarea tan simple.

Ian Mackinnon
fuente

Respuestas:

69

Suponiendo que la variable python-indentes 4:

M-x python-shift-right (C-c >)
M-x python-shift-left  (C-c <)
Chen Levy
fuente
55
Que tenía que hacer python-indent-shift-left.
nnyby
17

indent-rigidlytoma un argumento de prefijo que indica cuánto sangrar por, de modo que C-u 42 C-x TABsangra por 42 columnas, y dado que el argumento de prefijo predeterminado es 4, C-u C-x TABsangra por 4 columnas.

Si desea seleccionar la región nuevamente, hágalo C-x C-xdespués.

Gilles 'SO- deja de ser malvado'
fuente
8

Use el comando sangría rígidamente con un prefijo numérico.

C-u 4 M-x indent-rigidlypara sangrar la región por cuatro espacios, C-u -4 M-x indent-rigidlypara eliminar cuatro espacios.

KeithB
fuente
4

Cx Cx marca el código y luego Mx indent-for-tab-mode

Ese es el guardar si ha presionado tabulador para cada línea.

Néstor A. Díaz
fuente
3

También puedes usar el modo columna.

Seleccione las líneas en modo columna, luego agregue cuatro espacios a todas a la vez:

  1. Salte a la columna 1 de la primera línea que desea sangrar.
  2. C-<space> establecer marca
  3. mueve el punto hacia abajo a las últimas líneas (permanece en la columna uno)
  4. C-x r tpara ingresar al modo de columna (o C-<RET>si tiene el modo CUA)
  5. <space><space><space><space><RET>

Puede hacer una maniobra similar para eliminar cuatro espacios: simplemente incluya 4 columnas en su región marcada (pasos 2-3) y presione <DEL>

Steve Lianoglou
fuente
3

Actualizando la solución de Chen anterior, actualmente (probado en Emacs 24.4.1) los comandos han sido renombrados. Entonces, suponiendo que desea sangrar de acuerdo con la variable python-indent, los comandos son python-indent-shift-left y python-indent-shift-right. Usted puede:

  1. emitirlos escribiendo M-x python-indent-shift-rightoM-x python-indent-shift-left

  2. usar los atajos predeterminados en modo python C-c >yC-c <

  3. volver a unirlos. Por ejemplo, en un teclado con un botón de Windows uso:

    (global-set-key (kbd "s-s") 'python-indent-shift-left) 
    (global-set-key (kbd "s-d") 'python-indent-shift-right)
    
Amnon Harel
fuente
0

Composability es el rey con Emacs, solo combínelo M-icon https://github.com/magnars/multiple-cursors.el y tendrá su comando de bloqueo de sangría. Eso es lo que haces:

  1. M-> N veces (donde N es el número de líneas en el bloque)
  2. M-i
Evgeniy Dolzhenko
fuente
0

Ambos S-<LEFT>yS-<RIGHT> funcionan bien en Pythonmodo mayor. Es especialmente conveniente en el modo Cua donde el comportamiento C-cy C-xlos cambios se copian / cortan cuando se selecciona una región.

Vincent
fuente