Question
J'ai lu à plusieurs endroits que les fonctions rectangle dans emacs sont très utiles.J'ai lu un peu à leur sujet et je n'arrive pas à comprendre pourquoi.Je veux dire, quand vous voulez tuer un paragraphe, vous marquez la première ligne/colonne puis la dernière, et c'est en fait un rectangle, n'est-ce pas ?Mais vous pouvez toujours utiliser le kill normal...
Alors, quel genre de transformations feriez-vous avec eux ?
La solution
Si vous avez des données dans des colonnes dans un fichier texte avec M-x delete-rectangle
ou M-x kill-rectangle
vous pouvez supprimer une seule colonne de données.De la même manière, M-x yank-rectangle
va coller dans une colonne de texte.
Par exemple, prenons le texte suivant :
1. alligator alphorn
2. baboon bugle
3. crocodile cornet
4. dog didgeridoo
5. elephant euphonium
6. fish flugelhorn
7. gopher guitar
Choisissez entre le a de l'alligator et le g de la guitare.Le début et la fin de la sélection délimitent deux coins opposés du rectangle.Entrer M-x kill-rectangle
et vous avez immédiatement :
1. alphorn
2. bugle
3. cornet
4. didgeridoo
5. euphonium
6. flugelhorn
7. guitar
Ensuite, mettez la marque à la fin de la ligne supérieure, ajoutez quelques espaces si nécessaire et entrez M-x yank-rectangle
et ta-da !Vous avez réorganisé les colonnes :
1. alphorn alligator
2. bugle baboon
3. cornet crocodile
4. didgeridoo dog
5. euphonium elephant
6. flugelhorn fish
7. guitar gopher
Autres conseils
J'aime utiliser le rectangle à 2 fins principales, insérer le même texte sur chaque ligne ou supprimer une colonne de texte (similaire à la réponse de Dave Webb).
Il existe 2 raccourcis utiles pour ceux-ci, C-x r k
va tuer un rectangle, et C-x r t
à insérer (il existe d'autres commandes rectangle avec un C-x r
préfixe, mais ce sont ceux que j'utilise).
Supposons donc que vous souhaitiez prendre du code et le formater afin de pouvoir le publier dans une publication Stack Overflow...vous devez préfixer avec 4 espaces.Alors, allez au début de la première ligne, C-SPC
marquer, puis allez au début de la dernière ligne et C-x r t <SPC> <SPC> <SPC> <SPC> <RET>
, Et voila!Ensuite, vous pouvez simplement le copier et le coller dans Stack Overflow.J'ai rencontré des situations plus complexes où cela est utile, où vous avez en fait du texte que vous souhaitez insérer sur chaque ligne à un endroit particulier.
Donc dans une autre situation comme celle de Dave Webb, si vous voulez tuer un rectangle, utilisez C-x r k
mais parce que c'est beaucoup plus rapide ;-)
Aussi, selon mon carte de référence que j'ai imprimé au début, vous pouvez procéder comme suit :
C-x r r
:copier dans un registreC-x r y
:tirez sur un rectangleC-x r o
:ouvrez un rectangle en décalant le texte vers la droite (quoi que cela signifie...)C-x r c
:videz un rectangle (je suppose que cela signifie le remplacer par des espaces, mais il faudrait l'essayer pour voir)C-x r t
:préfixe avec texte (comme décrit ci-dessus)C-x r k
:tuer (comme décrit ci-dessus)
Dans emacs24+, il existe également une fonction pour numéroter les lignes :
(rectangle-number-lines START END START-AT &optional FORMAT)
Insert numbers in front of the region-rectangle.
START-AT, if non-nil, should be a number from which to begin
counting. FORMAT, if non-nil, should be a format string to pass
to `format' along with the line count. When called interactively
with a prefix argument, prompt for START-AT and FORMAT.
Il est lié à C-x r N par défaut.