OVH Cloud OVH Cloud

regexp et emacs

5 réponses
Avatar
Rakotomandimby Mihamina
Bonjour ,
Apres qqs desagrement de fonctionnement de mon PC j'ai recupéré les sources
de mon petit site perso ( *.html )
qd je les ouvre avec emacs a chaque fin de ligne , j'ai la chaine de
caractere ^M^M

Je suis vraiment un neuneu en regexp et je sais que le caractere ^ a une
signification en "regexp"
or , pour remplacer massivement , je n'utilise ( parceque je ne sais
utiliser ) que C-M-%

C-M-% utilise les regexp . je souhaiterai me deberasser de ces "^M^M"

1°) y aurai-til une commande similaire a C-M-% mais qui n'utilise pas lees
regexp ?

OU
2°) quelle regexp correspodrai a ^M^M ?

Merci d'avance
--
RKTMB http://mrakotom.free.fr

5 réponses

Avatar
Lam
Rakotomandimby Mihamina writes:

Bonjour ,
Apres qqs desagrement de fonctionnement de mon PC j'ai recupéré les sources
de mon petit site perso ( *.html )
qd je les ouvre avec emacs a chaque fin de ligne , j'ai la chaine de
caractere ^M^M

Je suis vraiment un neuneu en regexp et je sais que le caractere ^ a une
signification en "regexp"
or , pour remplacer massivement , je n'utilise ( parceque je ne sais
utiliser ) que C-M-%

C-M-% utilise les regexp . je souhaiterai me deberasser de ces "^M^M"

1°) y aurai-til une commande similaire a C-M-% mais qui n'utilise pas lees
regexp ?

OU
2°) quelle regexp correspodrai a ^M^M ?

Merci d'avance



moi j'ai ca :

;; convertit un fichier dos vers unix
(defun dos-unix ()
"Convertit un fichier dos vers unix"
(interactive)
(goto-char (point-min))
(while (search-forward "r" nil t)
(replace-match "")))

;; convertit un fichier unix vers dos
(defun unix-dos ()
"Convertit un fichier unix vers dos"
(interactive)
(goto-char (point-min))
(while (search-forward "n" nil t)
(replace-match "rn")))



--
(concatenate 'string "lam" (reverse "gro.ylimafxut@"))
Avatar
Olivier Ramare
Rakotomandimby Mihamina wrote:
Bonjour ,
Apres qqs desagrement de fonctionnement de mon PC j'ai recupéré les sources
de mon petit site perso ( *.html )
qd je les ouvre avec emacs a chaque fin de ligne , j'ai la chaine de
caractere ^M^M

Je suis vraiment un neuneu en regexp et je sais que le caractere ^ a une
signification en "regexp"
or , pour remplacer massivement , je n'utilise ( parceque je ne sais
utiliser ) que C-M-%

C-M-% utilise les regexp . je souhaiterai me deberasser de ces "^M^M"

1°) y aurai-til une commande similaire a C-M-% mais qui n'utilise pas lees
regexp ?

OU
2°) quelle regexp correspodrai a ^M^M ?

Merci d'avance


Ici le ^ indique un caractere non imprimable, en fait "^M"
qui doit etre carriage return et
censement la meme chose que ctrl-M.
Une solution simple : prendre cette zone a la souris,
cliquer gauche au dessus pour desactiver la zone,
ensuite ESC-% cliquer-milieu pour mettre le texte, et remplacer
par rien ici.

Il me semblait que dosify et undosify existait mais j'ai
perdu le package ...

^ en regexp signifie debut-de-ligne, ou plus precisement,
chaine-vide-en-debut-de-ligne.

Les caracteres de controle sont rarement a utiliser dans les
regexp sauf
?a => 7 ; C-g
?b => 8 ; backspace, BS, C-h
?t => 9 ; tab, TAB, C-i
?n => 10 ; newline, C-j
?v => 11 ; vertical tab, C-k
?f => 12 ; formfeed character, C-l
?r => 13 ; carriage return, RET, C-m
?e => 27 ; escape character, ESC, C-[
? => 92 ; backslash character,

Donc C-M-% rr[return] a remplacer par rien doit
fonctionner ... C'est un peu tordu mais c'est ce que
fait la fonction dos-unix : enfin, elle elle est encore plus
cool, elle remplace tous les r par rien !

Amities,
Olivier
Avatar
raphael.berbain
Rakotomandimby Mihamina writes:

Bonjour ,
Apres qqs desagrement de fonctionnement de mon PC j'ai recupéré les sources
de mon petit site perso ( *.html )
qd je les ouvre avec emacs a chaque fin de ligne , j'ai la chaine de
caractere ^M^M

Je suis vraiment un neuneu en regexp et je sais que le caractere ^ a une
signification en "regexp"
or , pour remplacer massivement , je n'utilise ( parceque je ne sais
utiliser ) que C-M-%

C-M-% utilise les regexp . je souhaiterai me deberasser de ces "^M^M"

1°) y aurai-til une commande similaire a C-M-% mais qui n'utilise pas lees
regexp ?



L'analogue de query-replace-regexp (C-M-%) sans les regexp est ...
query-replace (M-%). Mais voir ci-dessous, AMHA ça n'est pas un
problème de regexp. En bref, il s'agit de taper 'C-q RET' ou 'C-q
C-m' en lieu et place de '^M'.

2°) quelle regexp correspodrai a ^M^M ?



"^M^M", entré avec 'C-q RET C-q RET'.

Si j'ai a peu près compris, dans ton cas, ^M est la représentation à
l'écran du caractère non-imprimable 'C-m' - différent de la séquence
de deux caractères '^' et 'M'. Et le caractère 'C-m' n'a aucune
signification spécifique en syntaxe regexp.

Donc, au final l'incantation magique:

'C-M-% (ou M-%) RET C-q RET C-q RET RET RET !'

Sinon, si tes fichiers sont encodés avec je-ne-sais-trop quel encodage
exotique (visible en bas à gauche, dans la mode-line).
set-buffer-file-coding-system (C-x RET f) permet de changer l'encodage
utilisé : 'C-x RET f RET C-x C-s' permet d'enregistrer le fichier avec
un encodage convenable. Mais dans ton cas, si tu vois des ^M^M, ça ne
doit pas pouvoir aider.

--
Raphaël
Avatar
lhabert
Rakotomandimby Mihamina :

qd je les ouvre avec emacs a chaque fin de ligne , j'ai la chaine de
caractere ^M^M



Sous windows les fins de lignes sont codées par une séquence de deux
caractères : « ^M^J » (signification expliquée plus loin) tandis que sous
unix c'est juste « ^J » et sous mac juste « ^M » je crois. Tu t'es fait
tester par un transfert entre deux os différents j'imagine.

Je suis vraiment un neuneu en regexp et je sais que le caractere ^ a une
signification en "regexp"



Oui, cela veut dire que la regexp doit commencer à matcher en début de
ligne. Mais ici ça n'est pas un vrai « ^ » ni un vrai « M » qui sont
affichés. Si tu passes le curseur dessus, tu verras qu'il saute les deux
caractères d'un coup : le « ^M » est juste là pour représenter un unique
caractère (le numéro 13 du code ascii), et se prononce « controle M » parce
qu'on peut l'obtenir en tapant « ctrl M » (sauf qu'il se fait 9 fois sur 10
transformer en retour à la ligne « ^J » (caractère numéro 10) en cours de
route).

or , pour remplacer massivement , je n'utilise ( parceque je ne sais
utiliser ) que C-M-%

C-M-% utilise les regexp . je souhaiterai me deberasser de ces "^M^M"

1°) y aurai-til une commande similaire a C-M-% mais qui n'utilise pas lees
regexp ?



Oui : « M-% ». Mais ça ne changera rien ici : ton problème n'est pas avec
les regexps, mais avec la manière d'entrer le caractère « ^M ». Si tu tapes
« C-m », emacs va faire comme si tu avais appuyé sur entrée, mais il suffit
de taper « C-q » d'abord pour qu'il prenne le « ^M » tel quel.
Avatar
Rakotomandimby Mihamina
Raphaël Berbain wrote:

'C-M-% (ou M-%) RET C-q RET C-q RET RET RET !'


merci ca marche ....
merci beaucoup
--
RKTMB http://mrakotom.free.fr