66 votes

emacs : comment indenter/désindenter une région de code Python de 4 espaces ?

J'ai une région de code Python sélectionnée dans emacs. Quels sont les moyens les plus efficaces pour indenter et désindenter chaque ligne de cette région de 4 espaces ?

Idéalement, je voudrais quelque chose qui ne soit pas sensible au contexte (par exemple, cela me permettra d'indenter des passages dans des docstrings où l'indentation n'est pas liée à la syntaxe Python).

Ma ligne de mode montre (Python) . En cherchant sur le web, j'ai trouvé beaucoup de discussions sur l'utilisation de la python-mode au lieu de python mais je n'ai commencé à utiliser emacs qu'il y a quelques jours et je me méfie donc de changer les valeurs par défaut avant d'avoir eu la chance de les comprendre. Si vous changez pour python-mode est la meilleure option, je suis heureux de l'accepter comme réponse.

Ce que j'ai essayé (à partir du manuel) :

  • <TAB> aucun effet
  • C-M-\ aucun effet
  • C-x <TAB> (indent-rigidly) indente chaque ligne d'une colonne (et désélectionne la région)
  • M-i indente une première ligne par une tabulation (longueur de 8 espaces)
  • C-M-q - "C-M-q est indéfini"

Le seul moyen que j'ai trouvé est d'utiliser regex-replace, mais cela représente un nombre impressionnant de frappes pour une tâche aussi simple.

3voto

Filip Spiridonov Points 1238

Mise à jour de la solution de Chen ci-dessus, actuellement (testé sur Emacs 24.4.1) les commandes ont été renommées. Donc, en supposant que vous voulez indenter selon la variable Python-indent, les commandes sont Python-indent-shift-left et Python-indent-shift-right. Vous pouvez le faire :

  1. les délivrer en tapant M-x python-indent-shift-right o M-x python-indent-shift-left

  2. utiliser les raccourcis par défaut du mode Python C-c > y C-c <

  3. les relier. Par exemple, sur un clavier avec un bouton Windows, j'utilise :

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

0voto

Klathzazt Points 1694

La composabilité est le roi avec Emacs, il suffit de combiner M-i con https://github.com/magnars/multiple-cursors.el et vous avez votre commande de bloc d'indentation. C'est ce que vous faites :

  1. M-> N fois (où N est le nombre de lignes du bloc)
  2. M-i

0voto

user545351 Points 31

Les deux sites S-<LEFT> y S-<RIGHT> fonctionnent bien dans Python mode majeur. Il est particulièrement pratique dans Cua Mode donde C-c y C-x Le comportement change en copier/couper lorsqu'une région est sélectionnée.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X