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?

31
demandé sur Cheeso 2009-07-23 17:12:17

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).

10
répondu Sean Bright 2009-07-27 19:18:01

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
80
répondu CantGetANick 2011-11-01 05:13:25

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.

28
répondu Droogans 2014-11-18 03:47:14

Il y a aussi un outil de ligne de commande appelé unix2dos / dos2unix qui existe spécifiquement pour convertir les fins de ligne.

9
répondu KeyserSoze 2009-07-27 19:14:49

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.

8
répondu remvee 2009-07-28 07:35:29

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.

5
répondu Trey Jackson 2009-07-23 18:07:31

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.

4
répondu Gleb 2009-07-28 00:48:21

(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.

3
répondu Chris Arguin 2009-07-27 19:09:07

À 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.

1
répondu ayman 2009-08-13 23:10:57