emacs: come rientrare / rimuovere la regione del codice Python di 4 spazi?


60

Ho una regione di codice Python selezionata in emacs. Quali sono i modi più efficienti per indentare e separare ogni riga in essa di 4 spazi?

Idealmente mi piacerebbe qualcosa che non sia sensibile al contesto (ad es. Mi permetterà di rientrare i passaggi all'interno dei docstring in cui il rientro non si riferisce alla sintassi di Python).

La mia linea di modalità mostra (Python). Cercando sul web ho trovato molte discussioni sull'uso python-modeinvece di python, ma ho iniziato a usare emacs solo pochi giorni fa, quindi diffido dal cambiare le impostazioni predefinite prima di aver avuto la possibilità di capirle. Se passare a python-modeè l'opzione migliore, sono felice di accettarlo come risposta.

Cosa ho provato (dal manuale):

  • <TAB> nessun effetto
  • C-M-\ nessun effetto
  • C-x <TAB> (indent-rigidamente) rientra ogni riga di una colonna (e deseleziona la regione)
  • M-i rientra una prima riga di una scheda (lunghezza di 8 spazi)
  • C-M-q - "CMq non è definito"

L'unico modo che ho trovato è usare regex-replace, ma è un numero terribile di sequenze di tasti per un compito così semplice.

Risposte:


69

Supponendo che la variabile python-indentsia 4:

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

5
Ho dovuto fare python-indent-shift-left.
nnyby,

17

indent-rigidlyaccetta un argomento prefisso che indica di quanto rientrare, quindi C-u 42 C-x TABrientra di 42 colonne e poiché l'argomento prefisso predefinito è 4, rientra C-u C-x TABdi 4 colonne.

Se si desidera selezionare di nuovo la regione, procedere C-x C-xsuccessivamente.


8

Utilizzare il comando indent-rigidly con un prefisso numerico.

C-u 4 M-x indent-rigidlyindentare la regione di quattro spazi, C-u -4 M-x indent-rigidlyper rimuovere quattro spazi.


4

Cx Cx segna il codice e quindi Mx indent-for-tab-mode

Questo è il salvataggio se hai premuto il tasto tab per ogni riga.


3

È inoltre possibile utilizzare la modalità colonna.

Seleziona le linee in modalità colonna, quindi aggiungi quattro spazi a tutti contemporaneamente:

  1. Passa alla colonna 1 della prima riga che vuoi rientrare.
  2. C-<space> per segnare
  3. sposta il punto verso il basso sulle ultime righe (rimani nella prima colonna)
  4. C-x r tper accedere alla modalità colonna (o C-<RET>se hai la modalità CUA)
  5. <space><space><space><space><RET>

Puoi fare una manovra simile per eliminare quattro spazi: basta includere 4 colonne nella regione contrassegnata (passaggi 2-3) e premere <DEL>


3

Aggiornando la soluzione di Chen sopra, attualmente (testato su Emacs 24.4.1) i comandi sono stati rinominati. Quindi, supponendo che tu voglia rientrare in base alla variabile python-indent, i comandi sono python-indent-shift-left e python-indent-shift-right. Puoi:

  1. emetterli digitando M-x python-indent-shift-rightoM-x python-indent-shift-left

  2. usa le scorciatoie predefinite in modalità Python C-c >eC-c <

  3. ricambiarli. Ad esempio, su una tastiera con un pulsante di Windows che uso:

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


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.