Подтвердить что ты не робот

В emacs, как удалить CR (^ M) и оставить символы LF (^ J)?

Я пытаюсь использовать режим hexl, чтобы вручную удалить некоторые специальные символы из текстового файла и не вижу, как удалить что-либо в шестнадцатеричном режиме.

Я действительно хочу удалить возврат каретки и сохранить символы перевода строки. Правильно ли это режим Hexl?

4b9b3361

Ответ 1

Для этого не требуется шестнадцатеричный режим. Просто выполните глобальный поиск и замену ^ J ^ M с помощью ^ J Works для меня.:) Затем сохраните файл, убейте буфер и перейдите к файлу, чтобы окно отображало новый режим файла (Unix vs DOS).

Ответ 2

Не нужно искать замену. Просто используйте.

M-x delete-trailing-whitespace

Вы также можете установить кодировку файла через

C-x RET f unix

Ответ 3

К сожалению. Это ^ J ^ M необходимо ввести как два буквальных символа. Используйте c-q c-j, c-q c-m и для строки замены используйте c-q c-j.

Ответ 4

Также есть инструмент командной строки unix2dos/dos2unix, который существует специально для преобразования окончаний строк.

Ответ 5

Предполагая, что вы хотите, чтобы кодированный DOS файл был изменен в кодировку UNIX, используйте Mx set-buffer-file-coding-system (Cx RET f), чтобы установить систему кодирования в unix и сохранить файл.

Ответ 6

Если вы хотите удалить возврат каретки (обычно отображается как ^M) и оставить строку. Вы можете просто просмотреть файл без какого-либо преобразования:

M-x find-file-literally /path/to/file

Поскольку файл с возвратом каретки обычно отображается в режиме DOS (скрытие возврата каретки). Строка режима, скорее всего, отобразит (DOS) с левой стороны.

Как только вы это сделаете, появится ^M, и вы можете удалить их, как и любой символ.

Ответ 7

Вам не нужно использовать шестнадцатеричный режим. Вместо этого:

  • открыть файл таким образом, чтобы показать вам те ^ M. См. M-x find-file-literally/path/to/file выше. В XEmacs вы также можете сделать C-u C-x C-f и выбрать двоичную кодировку.
  • выберите строку, которую вы хотите заменить, и скопируйте ее с помощью M-w
  • сделайте M-% (запрос заменить) и вставьте то, что вы хотите скопировать, используя C-y
  • present Введите, когда будет предложено заменить его
  • возможный пресса! теперь, чтобы заменить все вхождения

Дело в том, что даже если вы не можете ввести то, что вы пытаетесь заменить, вы всегда можете выбрать/скопировать его.

Ответ 8

(в режиме hexl) Я не уверен, что вы можете удалить символы. Я всегда конвертировал их в пробелы или какой-то другой символ, переключился на обычный текстовый редактор и удалил их там.

Ответ 9

От 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))))))

Добавьте это в свой .emacs и запустите его через M-x xsteve-remove-control-M или привяжите его к более легкому ключу. Он разделит ^M на любой режим.