Travailler avec Python dans Emacs si je veux ajouter un try / except à un bloc de code, je trouve souvent que je dois indenter tout le bloc, ligne par ligne. Dans Emacs, comment indenter le bloc entier à la fois.
Je ne suis pas un utilisateur expérimenté d'Emacs, mais je trouve juste que c'est le meilleur outil pour travailler avec ssh. J'utilise Emacs en ligne de commande (Ubuntu), pas en tant qu'interface graphique, si cela fait une différence.
C-c >
pour le droit.C-c <
à gaucheRéponses:
Si vous programmez Python avec Emacs, vous devriez probablement utiliser le mode python. Avec le mode python, après avoir marqué le bloc de code,
C-c >
ouC-c C-l
décale la région de 4 espaces vers la droiteC-c <
ouC-c C-r
décale la région de 4 espaces vers la gaucheSi vous avez besoin de décaler le code de deux niveaux d'indention, ou d'un montant arbitraire, vous pouvez préfixer la commande avec un argument:
C-u 8 C-c >
décale la région de 8 espaces vers la droiteC-u 8 C-c <
décale la région de 8 espaces vers la gaucheUne autre alternative est d'utiliser
M-x indent-rigidly
ce qui est lié àC-x TAB
:C-u 8 C-x TAB
décale la région de 8 espaces vers la droiteC-u -8 C-x TAB
décale la région de 8 espaces vers la gaucheLes commandes de rectangle qui fonctionnent sur des rectangles de texte au lieu de lignes de texte sont également utiles .
Par exemple, après avoir marqué une région rectangulaire,
C-x r o
insère un espace vide pour remplir la zone rectangulaire (en déplaçant effectivement le code vers la droite)C-x r k
tue la région rectangulaire (déplaçant effectivement le code vers la gauche)C-x r t
demande une chaîne pour remplacer le rectangle par. La saisieC-u 8 <space>
entrera alors 8 espaces.PS. Avec Ubuntu, pour faire du mode python le mode par défaut pour tous les fichiers .py, installez simplement le
python-mode
package.la source
C-c >
est défini dans python-mode.el, donc je pense que vous devez avoir installé lepython-mode
paquet quelque part en cours de route. Heureux que cela fonctionne pour vous.C-c C-l
etC-c C-r
doivent être des liaisons personnalisées que vous avez configurées vous-même. Si vous exécutezemacs -q
(pour exécuter emacs sans charger de fichier d'initialisation), vous verrez qu'il n'y a pas de liaison pourC-c C-l
ouC-c C-r
en mode Python.En plus de
indent-region
, qui est mappéC-M-\
par défaut, les commandes d'édition de rectangle sont très utiles pour Python. Marquez une région comme normale, puis:C-x r t
(string-rectangle
): vous demandera les caractères que vous souhaitez insérer dans chaque ligne; idéal pour insérer un certain nombre d'espacesC-x r k
(kill-rectangle
): supprime une région rectangle; idéal pour supprimer l'indentationVous pouvez également
C-x r y
(yank-rectangle
), mais ce n'est que rarement utile.la source
indent-region
mappé àC-M-\
devrait faire l'affaire.la source
J'ai utilisé cette fonction pour gérer mon indentation et ma désindentation:
Et puis je l'assigne à un raccourci clavier:
la source
Je suis un newb d'Emacs, donc cette réponse est probablement presque inutile.
Aucune des réponses mentionnées jusqu'à présent ne couvre la ré-indentation de littéraux comme
dict
oulist
. Par exemple,M-x indent-region
ouM-x python-indent-shift-right
et compagnie ne vous aideront pas si vous avez copié-collé le littéral suivant et que vous avez besoin qu'il soit ré-indenté judicieusement:On a l'impression de
M-x indent-region
devoir faire quelque chose de sensépython-mode
, mais ce n'est pas (encore) le cas.Pour le cas spécifique où vos littéraux sont entre crochets, l'utilisation de TAB sur les lignes en question obtient ce que vous voulez (car les espaces ne jouent pas de rôle).
Donc, ce que j'ai fait dans de tels cas, c'est enregistrer rapidement une macro de clavier comme
<f3> C-n TAB <f4>
en F3, Ctrl-n (ou flèche vers le bas), TAB, F4, puis utiliser F4 à plusieurs reprises pour appliquer la macro peut enregistrer quelques frappes. Ou vous pouvez l'C-u 10 C-x e
appliquer 10 fois.(Je sais que cela ne sonne pas beaucoup, mais essayez de ré-indenter 100 lignes de déchets littéraux sans manquer la flèche vers le bas, puis de devoir remonter de 5 lignes et de répéter les choses;)).
la source
J'utilise l'extrait suivant. Sur tabulation lorsque la sélection est inactive, il met en retrait la ligne courante (comme il le fait normalement); lorsque la sélection est inactive, elle indente toute la région vers la droite.
la source
Faites l'indentation de manière interactive.
Copié de mon message dans: Retrait de plusieurs lignes dans Emacs
la source
Je fais quelque chose comme ça universellement
la source