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.

Respuestas:


69

Suponiendo que la variable python-indentes 4:

M-x python-shift-right (C-c >)
M-x python-shift-left  (C-c <)

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.


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.


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.


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>


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)
    


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.