Supposons que j'ai déjà sélectionné du texte dans le tampon actuel. Est-il possible de sélectionner une autre partie du texte, tout en conservant la sélection précédente (et ainsi de suite)?
Ajouté : Une motivation pour cette fonctionnalité est la suivante: Supposons que j'ai du texte qui ressemble à ceci:
paragraph 1 ...
paragraph 2 ...
paragraph 3 ...
paragraph 4 ...
paragraph 5 ...
Je voudrais supprimer certains paragraphes (par exemple 2, 4 et 6) et les insérer avant le paragraphe 1.
multiple-cursors
peut vous donner une solution.Réponses:
Vous pouvez utiliser
append-next-kill
(liéC-M-w
par défaut) pour accumuler le texte que vous souhaitez insérer ciparagraph 1
- dessus :Tuez
paragraph 2
comme vous le feriez normalement.Marquez
paragraph 4
et appuyezC-M-w
avant de le tuer. Répétez cette étape pour tous les paragraphes que vous souhaitez déplacer auparavantparagraph 1
.Lorsque vous avez terminé, vous pouvez retirer le texte accumulé avant
paragraph 1
.la source
Vous pouvez utiliser des registres combinés avec l'anneau de marque. Poussez les marques actuelles avec
C-<SPC> C-<SPC>
, récupérez-les plus tard avecC-u C-<SPC>
ou enregistrez-les dans un registre, disonsb
viaC-x r <SPC> b
, et revenez plus tard avecC-x r j b
.Marquez maintenant une autre région.
C-u C-x r s a
copiera la région marquée pour vous enregistrera
et supprimer le texte. Marquez ensuite la région suivante etC-u C-x r + a
ajoutera une autre sélection à ce registrea
et supprimez-la.Vous pouvez ensuite insérer le contenu avec
C-x r i a
.Consultez la section «Enregistrement de texte dans les registres» du manuel Emacs.
la source
La nouvelle prise en charge des régions rectangulaires dans Emacs-24.4 a en fait introduit (une grande partie de) l'infrastructure nécessaire à cette fonctionnalité [après tout, une région rectangulaire est une région non contiguë].
Ainsi, il devrait être possible maintenant d'implémenter un package "split-region" qui fournit juste la fonctionnalité que vous demandez.
Certes, de nombreuses commandes Emacs n'ont toujours pas été adaptées pour utiliser la nouvelle infrastructure (par exemple, des commandes comme upcase-region, ou undo-in-region, query-replace, ...) et ne fonctionnent donc pas encore correctement sur les rectangles (donc ils ne fonctionneraient pas correctement sur une "région divisée" non plus), mais ce sont des bogues qui devraient être corrigés avec le temps.
la source
Installez Browse-Kill-Ring.el
copier et tuer toutes les régions d'intérêt.
Arrivé au point où la réinsertion doit commencer.
M-x
browse-kill-ring
RET ouvrira un tampon et y placera le curseur.Tapez npour voyager des morceaux.
RET il insérera le morceau au point dans le tampon original / autre.
la source
Si les lignes que vous souhaitez manipuler peuvent être distinguées via une correspondance d'expression régulière, vous pouvez utiliser le mode occurrence pour les afficher dans une nouvelle fenêtre. Vous pouvez ensuite utiliser le mode occurrence-edit pour les modifier, le tampon d'origine reflétant les modifications que vous apportez dans le tampon Occur.
Cela fonctionne à merveille, par exemple, en combinaison avec le mode à curseurs multiples : parce que les lignes que vous avez sélectionnées pour apparaître dans le tampon Occur sont affichées de manière contiguë, quelle que soit leur distance dans le tampon d'origine, vous pouvez les marquer toutes ou un sous - ensemble , puis les activer
mc/edit-lines
et les modifier tous en même temps. (Oui, je sais que plusieurs curseurs peuvent faire tout cela avec eux-mêmesmc/mark-all-like-this
, mais c'est bien d'avoir des options.)Toute autre opération d'édition qui serait plus facile à réaliser si vous ne voyiez que les lignes sur lesquelles vous vouliez travailler, comme la configuration d'une recherche et d'un remplacement d'expressions complexes, ou une macro qui doit s'exécuter à tour de rôle sur chaque ligne d'un tampon, peut également être fait de cette façon.
la source
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:
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.
la source
Autre option: transposer des paragraphes
Par souci d'exhaustivité, vous pouvez réaliser votre réorganisation des paragraphes (séquentiellement) avec des régions marquées et
M-0 M-x transpose-paragraph
(l'argument zéro faittra-par
permuter les paragraphes où se trouvent le point et la marque, c'est-à-dire que la région commence et se termine)!Par ailleurs, cela fonctionne pour toutes les
transpose-.*
commandes (-words, -sexp, -sentences, ...) et est extrêmement pratique dans de nombreuses situations.la source
Une autre façon est d'utiliser le paquet objed (je suis l'auteur). Vous pouvez marquer n'importe quel objet texte avec
m
le point est déplacé automatiquement vers l'objet suivant de type actuel. Décochez tout objet en y accédant et appuyez à nouveau sur m. Voici un exemple de capture d'écran (montre les lignes de marquage mais fonctionne pour d'autres objets comme les paragraphes, les défuns ... aussi):la source
package-install-from-archive: http://melpa.milkbox.net/packages/objed-20181201.1346.tar: Not found
.M-x package-refresh-contents
et ensuiteM-x package-install
.