Dans emacs, comment dépouiller CR (^M) et laisser des caractères LF (^J)?
J'essaie d'utiliser le mode hexl pour supprimer manuellement des caractères spéciaux d'un fichier texte et je ne vois pas comment supprimer quoi que ce soit en mode hexl.
Ce que je veux vraiment, c'est supprimer le retour chariot et conserver les caractères de saut de ligne. Le mode Hexl est-il la bonne façon de le faire?
9 réponses
Pas besoin de hexl-mode pour cela. Il suffit de faire une recherche globale et de remplacer ^J^M par ^J fonctionne pour moi. :) Ensuite, enregistrez le fichier, tuez le tampon et revisitez le fichier afin que la fenêtre affiche le nouveau mode de fichier (Unix vs DOS).
Pas besoin de trouver remplacer. Juste à l'utiliser.
M-x delete-trailing-whitespace
Vous pouvez également définir l'encodage du fichier via
C-x RET f unix
Oups. Que ^J^M doit être entré en tant que deux caractères littéraux.
Utilisation c-q
c-j
, c-q
c-m
et pour la chaîne de remplacement, l'utilisation c-q
c-j
.
Il y a aussi un outil de ligne de commande appelé unix2dos / dos2unix qui existe spécifiquement pour convertir les fins de ligne.
En supposant que vous voulez qu'un fichier codé DOS soit changé en encodage UNIX, utilisez M-x set-buffer-file-coding-system (C - X RET f) pour définir le système de codage sur "unix" et enregistrer le fichier.
Si vous souhaitez supprimer un retour chariot (généralement affiché comme ^M
) et laisser le saut de ligne. Vous pouvez simplement visiter le fichier sans aucune conversion:
M-x find-file-literally /path/to/file
Parce qu'un fichier avec des retours chariot est généralement affiché en mode DOS (masquant les retours chariot). La ligne mode affichera probablement (DOS)
sur le côté gauche.
Une fois que vous avez fait cela, le {[1] } apparaîtra et vous pouvez les supprimer comme vous le feriez pour n'importe quel personnage.
Vous n'avez pas besoin d'utiliser le mode hexl. Au lieu de cela:
- Ouvrez le fichier d'une manière qui vous montre ces ^M. Voir M - x find-file-littéralement / chemin / vers / fichier ci-dessus. Dans XEmacs, vous pouvez également faire C-u C-x C-f et sélectionner l'encodage binaire.
- Sélectionnez la chaîne que vous voulez remplacer et copiez-la en utilisant M-w
- Faites M - % (query replace) et collez ce que vous voulez copier en utilisant C-y
- présent entrer lorsque vous êtes invité à ce que le remplacer par
- Presse possible ! maintenant pour remplacer tous occurrences
Le fait est que même si vous ne savez pas comment entrer ce que vous essayez de remplacer, vous pouvez toujours le sélectionner/le copier.
(en mode hexl) Je ne suis pas sûr que vous puissiez supprimer les caractères. Je les ai toujours convertis en espaces ou en un autre caractère,je suis passé à l'éditeur de texte régulier et je les ai supprimés.
À Partir de http://www.xsteve.at/prg/emacs/xsteve-functions.el:
;02.02.2000
(defun xsteve-remove-control-M ()
"Remove ^M at end of line in the whole buffer."
(interactive)
(save-match-data
(save-excursion
(let ((remove-count 0))
(goto-char (point-min))
(while (re-search-forward (concat (char-to-string 13) "$") (point-max) t)
(setq remove-count (+ remove-count 1))
(replace-match "" nil nil))
(message (format "%d ^M removed from buffer." remove-count))))))
Ajoutez ceci à votre .emacs
et exécutez-le via M-x xsteve-remove-control-M
ou liez-le à une clé plus facile. Il va dépouiller les ^M
s dans anymode.