Cela répond à votre question générale, mais pas particulièrement au cas d'utilisation que vous mentionnez (déplacer des morceaux de code).
Emacs a maintenant ce qu'il appelle une région non contiguë , c'est le type de sélection que vous demandez. Vanilla Emacs ne fournit aucun moyen spécial de créer une région non contiguë, sauf s'il s'agit d'un rectangle . Mais les zones de bibliothèque le font.
Les zones de bibliothèque vous permettent de définir plusieurs zones dans votre tampon. Une liste de zones est une région non contiguë . Vous pouvez également le considérer comme plusieurs régions, selon la façon dont vous souhaitez l'utiliser. Vous pouvez définir plusieurs listes de zones à tout moment, chacune étant affectée à une variable de zones différente, et vous pouvez basculer entre elles.
Si vous utilisez également la bibliothèque Bookmark +, vous pouvez enregistrer les listes de zones de manière persistante et les restaurer dans les sessions Emacs ultérieures. Bookmark + vous permet également d'attribuer des balises arbitraires à un signet. Cela signifie que vous pouvez baliser une liste de zones.
Les zones d'une liste de zones donnée sont généralement dans le même tampon, mais elles ne doivent pas nécessairement l'être. En cela, une liste de zones est plus générale qu'une région non contiguë. Il est également plus général en ce que chaque zone peut contenir des informations supplémentaires, en plus des limites de zone, et peut avoir un identifiant.
Il existe plusieurs façons de créer une zone. L' un des est plus facile à utiliser C-x n a
: il définit une zone de la région active, et ajoute à l'ensemble actuel de la zone. ( C-x n n
( narrow-to-region
) fait également cela, en plus du rétrécissement.)
Voici certaines des choses que vous pouvez faire avec un ensemble (liste) de zones:
- Triez-les.
- Unir (fusionner) les zones adjacentes ou qui se chevauchent (ce qui inclut leur tri).
- Les intersecter.
- Limitez le tampon à une zone de la liste. Parcourez les rétrécissements. Voir plusieurs rétrécissements .
- Sélectionnez une zone dans la liste comme région active. Parcourez les régions.
- Recherchez-les (ils sont automatiquement réunis en premier). Pour cela, vous avez besoin de la bibliothèque Isearch + .
- Remplacez-les par-dessus.
- Mettez-les en surbrillance et désactivez-les. (Pour cela, vous avez besoin d'une bibliothèque Highlight ou d'une bibliothèque
facemenu+.el
.
Voir aussi Narrow Indirect , qui vous permet de créer des tampons indirects qui sont des clones d'un tampon donné et qui sont restreints à différentes parties de celui-ci.