J'ai souvent une situation où j'ai besoin d'appliquer du texte autour d'une région. Pour HTML et les cas simples, il existe déjà des bibliothèques pour cela. Mais qu'en est-il du cas général? J'aimerais qu'on me demande ce que je vais insérer au début et à la fin de la région.
elisp
text-editing
nperson325681
la source
la source
<?php
...?>
, puis, lorsque vous sélectionnez une région et un type<?php
(ou une liaison de touches), la placer dans la paire. Mais afaik, il n'y a pas de moyen facile d'utiliser ces bibliothèques si vous avez plusieurs paires à un coup.Réponses:
Je suis allé sur Google et j'ai trouvé ce post de John D. Cook . Il montre comment créer une fonction interactive simple pour obtenir facilement des balises HTML / XML dans la région. De là, j'ai modifié la fonction pour demander deux fois.
Plus important encore, cette fonction peut également être utilisée comme un outil auxiliaire, par exemple lorsque vous souhaitez lier des clés pour mapper des bits de texte spécifiques.
la source
evil
que j'utilise cela interfère ici. Peut-être qu'une fonction de typeinteractive "r"
fonctionnait de manière plus robuste?Je proposerais une approche différente. Lorsqu'il y a une région, par définition, elle
point
doit être au début (ou à la fin) de la région, etmark
sera à la fin (ou au début). Ce qui signifie que vous pouvez entrer le texte que vous voulez au point, puis utiliserexchange-point-and-mark
, c'estC-x C-x
-à- dire , pour sauter à l'autre extrémité de la région. Entrez la seconde moitié de votre emballage et vous avez terminé.Vous n'êtes pas explicitement invité à entrer le texte d'insertion, mais je ne peux pas imaginer qu'il y aurait un moyen d'accomplir la même chose avec moins d'effort.
la source
multiple-cursors
pourrait être modifié pour insérer du texte simultanément au début et à la fin de la région active.C-x C-x
. Avec votre réponse, vous devez appeler votre fonction (C-c something
), et vous devez également frapperreturn
après chaque entrée. Peu importe ce que vous faites, vous disposez de deux touches supplémentaires. Cela dit, cela n'aide pas si vous voulez que quelque chose appelle elisp.Juste pour la variété:
Une autre façon de le faire avec un texte de début et de fin arbitraire serait d'utiliser
replace-regexp
sur la région: faire correspondre.+
et remplacer parbefore \& after
, ou tout texte que vous souhaitez utiliser pourbefore
etafter
.Vous pouvez écrire une commande pour cela, mais je pense à un cas où, dans un fichier donné, vous souhaitez appliquer le même texte de début / fin à plusieurs endroits. Vous pouvez enregistrer une macro ou simplement utiliser l'historique du mini-tampon pour répéter sur une autre région.
Bien sûr, si le texte que vous souhaitez encapsuler peut être exprimé sous la forme d'une expression régulière, vous n'aurez même pas besoin de sélectionner une région et de le faire
query-replace-regexp
sur le tampon, mais le texte que vous souhaitez encapsuler n'est probablement pas cohérent.la source