Je me retrouve fréquemment à essayer de remplacer par exemple foo
avec bar
et bar
avec foo
dans un tampon.
La façon dont je le fais habituellement est soit:
- 3-requête remplace:
aaa -> @@@
,bbb -> aaa
,@@@ -> bbb
- abandonnez l'automatisation et faites simplement le remplacement à la main
Je suppose qu'il est possible de faire fonctionner quelque chose en utilisant la ,
syntaxe query-replace-regexp
pour tester si la chaîne correspondante est aaa
ou bbb
. Mais la syntaxe résultante serait trop lourde, donc je ne l'ai jamais vraiment essayée.
Le fait est que, étant donné la fréquence d'une tâche, je pense qu'il doit y avoir une meilleure façon de procéder en une seule étape, soit intégrée, soit dans un package existant. Y a-t-il?
replace
refactoring
T. Verron
la source
la source
query-replace
, je sais que c'est généralement plus rapideM-% str1 str2
que de déplacer le point et de faire le changement à la main. C'est bien, car je n'ai pas à perdre de temps à penser à ce qui sera le plus rapide, même s'il n'y a qu'une seule occurrence destr1
. Idéalement, j'aimerais que l'inversion de texte soit tout aussi rapide, afin de pouvoir l'utiliser sans y penser également.(setq a (prog1 b (setq b a)))
. Et il peut même y avoir un moyen plus simple.\,(if \1 "b" "a")
particulièrement moche (contre une expression régulière de\(a\)\|b
), mais les mots doivent quand même être tapés deux fois, si cela vous dérange.\(aaa\)\|bbb
?Réponses:
Voici une petite commande qui fera cela:
la source
query-replace
pour l'inversion, afin qu'il conserve toutes ses fonctionnalités? Il ne correspond pas à 100% à la définition de mes emacs, mais je suis toujours avec 24,5 ...query-replace
famille de fonctions de la dernière version, il conserve donc toutes les fonctionnalités. À la fin de la fonction, j'ai ajouté ma méthode recommandée pour permuter les chaînes mentionnée dans le manuel Emacs.backward
etregion-noncontiguous-p
de l'appel àperform-replace
. Est-ce un problème général ou cela signifie-t-il que l'interfaceperform-replace
a changé entre les versions?Installer plur
et exécutez la commande
plur-query-replace
et entrée
{foo,bar}
et son remplacement{bar,foo}
Appuyez sur
y
pour remplacer les occurrences comme vous le souhaitez.Il existe également des variantes non interactives et de type isearch de cette commande.
la source
;)
plur
requiertemacs 24.4
.