Bonjour à tous,
Je m'adresse à ceux qui maitrisent emacs (et je sais qu'il y en a ici) pour m'aider à créer une petite commande dans mon fichier de configuration.
Dans mes documents LaTeX, j'utilise une commande \Cor[nv]{ici le corrigé}{là un espace blanc ou autre chose}
Pour faite le corrigé, je mets des [v] à la place des [nv] et je le fais soit à la main si je veux un corrigé partiel, soit en utilisant la commande Alt-x % pour rechercher et remplacer toutes les itérations.
Je souhaiterais créer une fonction dans mon fichier de configuration d'emacs qui me remplacerait tous les [nv] en [v] si c'était possible.
Merci d'avance pour votre aide.
Commande de remplacement sous emacs
-
- Utilisateur éprouvé
- Messages : 213
- Inscription : jeudi 28 février 2008, 16:20
- Localisation : Vendée
Commande de remplacement sous emacs
Thibault
Prof de maths...
Utilisateur de LaTeX sous Linux (kubuntu 23.10)
Distrib TeXlive
Éditeur GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, cairo version 1.17.8) + auctex + yasnippets
Prof de maths...
Utilisateur de LaTeX sous Linux (kubuntu 23.10)
Distrib TeXlive
Éditeur GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, cairo version 1.17.8) + auctex + yasnippets
-
- Utilisateur chevronné
- Messages : 2822
- Inscription : samedi 08 juillet 2006, 20:56
- Localisation : Saint Bonnet Elvert
Re: Commande de remplacement sous emacs
Personnellement ce n'est pas du tout ainsi que j'aurais procédé, mais chacun ses goûts. Il existe le package answers qui permet de gérer plusieurs versions d'un même document.
Il reste que le problème de recherche et remplacement d'une chaîne de caractères contenant des crochets droits est intéressant, car les crochets droits sont des caractères spéciaux qu'il faut traiter avec ménagement en les protégeant par le caractère échappement \\.
Voici une fonction simple qui semble correspondre à ta demande, on peut l'associer à une touche de commande, selon tes goûts.
Pour trouver la chaîne de caractère qui va détecter une chaîne donnée un peu délicate (comme [nv]), j'ai utilisé le mode re-builder qui permet de vérifier visuellement ce qui va être détecté. Le caractère spécial [ doit être protégé par le caractère d'échappement qui, étant lui-même spécial doit être protégé.
J'ai fait au plus simple, il n'y a pas de vérification, Il faut être certain qu'il n'y aura pas de changements intempestifs.
J'aurais pu utiliser une fonction qui demande la confirmation du remplacement.
Il reste que le problème de recherche et remplacement d'une chaîne de caractères contenant des crochets droits est intéressant, car les crochets droits sont des caractères spéciaux qu'il faut traiter avec ménagement en les protégeant par le caractère échappement \\.
Voici une fonction simple qui semble correspondre à ta demande, on peut l'associer à une touche de commande, selon tes goûts.
Code : Tout sélectionner
(defun ma-fonction-remplace()
"Remplace tous les [nv] d'un document par des [v]"
(interactive)
(save-excursion
(goto-char(point-min))
(while(re-search-forward "\\[nv\\]" nil t )(replace-match "[v]"))))
J'ai fait au plus simple, il n'y a pas de vérification, Il faut être certain qu'il n'y aura pas de changements intempestifs.
J'aurais pu utiliser une fonction qui demande la confirmation du remplacement.
JJR.
LaTeXien migrateur.
LaTeXien migrateur.
-
- Utilisateur éprouvé
- Messages : 213
- Inscription : jeudi 28 février 2008, 16:20
- Localisation : Vendée
Re: Commande de remplacement sous emacs
Merci pour ta réponse, je vais tester cela dès que je pourrai
Concernant le package answers, j'ai regardé et cela me semble beaucoup plus compliqué et ne correspond pas à ce que que je souhaite. Pour ma part, je n'ajoute pas simplement la réponse pour le document corrigé, soit j'ai la réponse, soit j'ai autre chose (des pointillés par exemples ou un tableau vide, ...) et je peux aussi mettre ma commande dans du code pstricks pour afficher des éléments uniquement dans mon document corrigé.
Bref, je n'ai pas trouvé aussi souple avec quelque chose de moins compliqué que ma commande qui est très simple au demeurant et qui fait ce que je souhaite
Merci encore pour le coup de main !
Thibault
Prof de maths...
Utilisateur de LaTeX sous Linux (kubuntu 23.10)
Distrib TeXlive
Éditeur GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, cairo version 1.17.8) + auctex + yasnippets
Prof de maths...
Utilisateur de LaTeX sous Linux (kubuntu 23.10)
Distrib TeXlive
Éditeur GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, cairo version 1.17.8) + auctex + yasnippets
-
- Utilisateur éprouvé
- Messages : 213
- Inscription : jeudi 28 février 2008, 16:20
- Localisation : Vendée
Re: Commande de remplacement sous emacs
Bon, je viens de tester et cela fonctionne parfaitement. Merci JJR !
Ceci étant, je n'arrive pas à comprendre comment associer un raccourci à cette commande. Voici ce que j'ai essayé en regardant les exemples sur les forums mais cela ne fonctionne pas :
Merci d'avance.
[Edit] bon j'ai trouvé finalement, c'était
Ceci étant, je n'arrive pas à comprendre comment associer un raccourci à cette commande. Voici ce que j'ai essayé en regardant les exemples sur les forums mais cela ne fonctionne pas :
Code : Tout sélectionner
defun remplace-nv ()
"Remplace tous les [nv] d'un document par des [v]"
(interactive)
(save-excursion
(goto-char(point-min))
(while(re-search-forward "\\[nv\\]" nil t )(replace-match "[v]"))))
(global-set-key (kbd "<C-s-v>") 'remplace-nv)
[Edit] bon j'ai trouvé finalement, c'était
Code : Tout sélectionner
(global-set-key (kbd "C-s-v") 'remplace-nv)
Thibault
Prof de maths...
Utilisateur de LaTeX sous Linux (kubuntu 23.10)
Distrib TeXlive
Éditeur GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, cairo version 1.17.8) + auctex + yasnippets
Prof de maths...
Utilisateur de LaTeX sous Linux (kubuntu 23.10)
Distrib TeXlive
Éditeur GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, cairo version 1.17.8) + auctex + yasnippets
-
- Utilisateur chevronné
- Messages : 2822
- Inscription : samedi 08 juillet 2006, 20:56
- Localisation : Saint Bonnet Elvert
Re: Commande de remplacement sous emacs
Il n'y a pas de vérification que des remplacements intempestifs puissent se produire, il faut être sûr qu'il n'y aura pas de [nv] que ceux dont le remplacement est souhaités.
C'est parfait.Thibault a écrit : ↑lundi 22 janvier 2024, 14:29 [Edit] bon j'ai trouvé finalement, c'étaitCode : Tout sélectionner
(global-set-key (kbd "C-s-v") 'remplace-nv)
Je ne procède pas ainsi, car la combinaison de touches sélectionnées est active dans tous les modes, et on peut avoir le désir d'utiliser cette combinaison pour une autre fonction dans un autre mode.
J'utilise l'extension bind-key de John Wiegley qui me permet de définir ses propres touches préfixes.
John Wiegley est également l'auteur de use-package, un génial «wraper» pour configurer les extensions de Emacs dans le fichier d'initialisation.
JJR.
LaTeXien migrateur.
LaTeXien migrateur.