Comment décaler une zone de texte sélectionnée dans Emacs d'un certain nombre d'espaces?

26

J'écris du code python, il est donc important de déplacer / déplacer des blocs de lignes pour éviter de parcourir chaque ligne individuellement. Comment puis-je le faire sans module complémentaire? Existe-t-il un type de commande de frappe d'opération pour ce faire?

Vass
la source
3
Pour les réponses non spécifiques à Python, voir emacs.stackexchange.com/q/11 et emacs.stackexchange.com/q/18 .
legoscia

Réponses:

40

Utilisez la commande indent-rigidly, qui est liée C-x TABpar défaut.

Vous pouvez spécifier le nombre d'espaces à indenter en utilisant un argument de préfixe , tel que C-5 C-x TAB.

Ou vous pouvez invoquer la commande, puis utiliser les flèches gauche / droite pour ajuster interactivement le niveau de retrait.

glucas
la source
comment ajouter un argument préfixe?
Vass
1
Essayez par exemple de C-5 C-x TABmettre en retrait la région actuelle de 5 espaces.
glucas
super, mais pourquoi la première ligne ne bouge-t-elle pas aussi bien? Je dois saisir la dernière partie de la ligne au-dessus de la sélection pour faire bouger l'ensemble de lignes que je veux.
Vass
1
Vous ne devriez pas avoir besoin de sélectionner quoi que ce soit de la ligne précédente, mais vous voulez sélectionner depuis le début de la première ligne que vous souhaitez mettre en retrait. Par exemple, C-apour passer au début de la ligne, C-SPCpour commencer à marquer la région, C-n C-npour descendre de quelques lignes, C-5 C-x TABpour mettre en retrait ces deux lignes.
glucas
1
"utilisez les flèches gauche / droite pour ajuster interactivement le niveau de retrait" Vraiment? Génial! Je ne le savais pas, et parfois je devais deviner combien d'espaces j'avais besoin d'ajouter ou de supprimer. J'espère que cela peut vous aider.
imz - Ivan Zakharyaschev
9

Si vous utilisez python-mode.el C-c >ou C-c <pour déplacer des blocs vers la gauche ou la droite

Lompik
la source
comment se fait-il que la première ligne de la sélection reste immobile si je ne sélectionne pas la dernière partie de la ligne au-dessus?
Vass
Je ne peux pas reproduire ce comportement. toutes les lignes d'une sélection sont déplacées. Emacs 24.4
Lompik
Le commentaire de glucas dit que cela se produira si vous ne sélectionnez pas depuis le début de la ligne
Vass
6

La string-rectanglecommande ( C-x r t) peut être utilisée pour insérer tout texte arbitraire (espaces inclus) dans une région sélectionnée.

Disons que vous avez ce bloc de texte et que vous souhaitez insérer 5 espaces devant toutes les lignes.

abc
  def
    ghi

Sélectionnez d'abord une région "0 colonne" comme indiqué ci-dessous (le point est sur le caractère "a" et la marque se trouve dans la même colonne de la ligne contenant "ghi":

▮bc
  def
▯   ghi

Maintenant, à l'aide de string-rectangle, insérez le texte que vous souhaitez insérer dans la région sélectionnée. Dans cet exemple, nous allons insérer 5 espaces sur toutes les lignes, y compris et entre le point et la marque.

C-x r t M-5 SPC RET

Cela donnera le texte en retrait de force ci-dessous.

     abc
       def
         ghi
Kaushal Modi
la source
4

Il y a C-x TAB(lié à indent-rigidly). Donnez-lui un argument de préfixe pour indiquer le nombre d'espaces que vous souhaitez mettre en retrait, négatif supprime ce nombre d'espaces.

Harald Hanche-Olsen
la source
0

J'ai trouvé qu'en appuyant sur Alt-4 puis sur SPC, j'obtiens le résultat souhaité. Je ne sais pas si c'est la meilleure façon, mais cela fonctionne aussi.

Vass
la source