В emacs, как удалить CR (^ M) и оставить символы LF (^ J)?
Я пытаюсь использовать режим hexl, чтобы вручную удалить некоторые специальные символы из текстового файла и не вижу, как удалить что-либо в шестнадцатеричном режиме.
Я действительно хочу удалить возврат каретки и сохранить символы перевода строки. Правильно ли это режим Hexl?
Ответы
Ответ 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
на любой режим.