J'ai une région de code python sélectionnée dans emacs. Quels sont les moyens les plus efficaces d’indenter et désindenter chaque ligne de celle-ci de 4 espaces?
Idéalement, j'aimerais quelque chose qui ne soit pas sensible au contexte (par exemple, cela me permettra d'indenter des passages dans docstrings où l'indentation ne se rapporte pas à la syntaxe python).
Ma ligne de mode affiche (Python)
. En recherchant sur le Web, j'ai trouvé beaucoup de discussions sur l'utilisation de python-mode
au lieu de python
, mais je n'ai commencé à utiliser emacs que depuis quelques jours. changer les valeurs par défaut avant d’avoir eu la chance de les comprendre. Si passer à python-mode
est la meilleure option, je suis heureux de l’accepter comme réponse.
Ce que j'ai essayé (d'après le manuel):
<TAB>
aucun effetC-M-\
aucun effetC-x <TAB>
(indent-rigidly) indenter chaque ligne d'une colonne (et désélectionne la région)M-i
indente une première ligne d'un onglet (longueur de 8 espaces)C-M-q
- "C-M-q n'est pas défini"La seule façon que j'ai trouvée consiste à utiliser regex-replace, mais c'est un nombre impressionnant de frappes au clavier pour une tâche aussi simple.
En supposant que la variable python-indent
est 4:
M-x python-shift-right (C-c >)
M-x python-shift-left (C-c <)
indent-rigidly
prend un argument de préfixe indiquant le niveau d'indentation, donc C-u 42 C-x TAB
indente de 42 colonnes et, puisque l'argument de préfixe par défaut est 4, C-u C-x TAB
indente de 4 colonnes.
Si vous souhaitez sélectionner à nouveau la région, faites C-x C-x
par la suite.
Utilisez la commande indent-rigidly avec un préfixe numérique.
C-u 4 M-x indent-rigidly
pour indenter la région de quatre espaces, C-u -4 M-x indent-rigidly
pour supprimer quatre espaces.
C-x C-x marque le code puis M-x indent-for-tab-mode
C'est la sauvegarde si vous avez appuyé sur Tab pour chaque ligne.
Vous pouvez également utiliser le mode colonne.
Sélectionnez les lignes en mode colonne, puis ajoutez quatre espaces à la fois:
C-<space>
pour définir la marqueC-x r t
pour entrer en mode colonne (ou C-<RET>
si vous avez le mode CUA)<space><space><space><space><RET>
Vous pouvez effectuer une manœuvre similaire pour supprimer quatre espaces - il suffit d'inclure 4 colonnes dans la région marquée (étapes 2 à 3) et d'appuyer sur <DEL>
Mise à jour de la solution de Chen ci-dessus, actuellement (testé sur Emacs 24.4.1), les commandes ont été renommées. Donc, si vous voulez indenter en fonction de la variable python-indent, les commandes sont python-indent-shift-left et python-indent-shift-right. Vous pouvez:
les émettre en tapant M-x python-indent-shift-right
ou M-x python-indent-shift-left
utiliser les raccourcis en mode python par défaut C-c >
et C-c <
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)
Les deux S-<LEFT>
ET S-<RIGHT>
fonctionnent correctement en mode majeur Python
. C'est particulièrement pratique en mode Cua où le comportement de C-c
et C-x
se transforme en copier/couper lorsqu'une région est sélectionnée.
La composabilité est le roi avec Emacs, combinez simplement M-i
avec https://github.com/magnars/multiple-cursors.el et vous obtiendrez votre bloc d'indentation commander. C'est ce que vous faites:
M->
N fois (où N est le nombre de lignes du bloc)M-i