В Emacs, как лишить CR (^M) и оставить символы LF (^J)?
-
19-09-2019 - |
Вопрос
Я пытаюсь использовать режим HEXL, чтобы вручную удалить некоторые специальные ChARS из текстового файла и не вижу, как что -либо удалить в режиме HEXL.
Что я действительно хочу, так это удалить возврат перевозки и сохранить символы линии. Правильный ли hexl -режим правильный способ сделать это?
Решение
Нет необходимости в Hexl-Mode для этого. Просто сделайте глобальный поиск и замену ^j ^m с ^J работает для меня. :) Затем сохраните файл, убейте буфер и верните файл, чтобы в окне показано новый режим файла (Unix VS DOS).
Другие советы
Нет необходимости находить замену. Просто используйте.
M-x delete-trailing-whitespace
Вы также можете установить кодирование файла через
C-x RET f unix
Упс. Это ^j ^m должно быть введено в виде двух буквальных символов. Использовать c-q
c-j
, c-q
c-m
и для строки смены используйте c-q
c-j
.
Есть также инструмент командной строки под названием Unix2dos/Dos2Unix Это существует специально для преобразования концов линии.
Предполагая, что вы хотите, чтобы файл, кодированный DOS, был изменен в кодировку UNIX, используйте Set-Buffer-File-File-File-System (CX RET F), чтобы установить систему кодирования в «UNIX» и сохранить файл.
Если вы хотите удалить возврат каретки (обычно отображается как ^M
и оставьте линию. Вы можете просто посетить файл с любым преобразованием:
M-x find-file-literally /path/to/file
Поскольку файл с возвратом каретки обычно отображается в режиме DOS (скрывая возврат перевозки). Линия режима, скорее всего, отобразит (DOS)
с левой стороны.
Как только вы это сделаете, ^M
появится, и вы сможете удалить их, как вы будете любого персонажа.
Вам не нужно использовать Hexl-Mode. Вместо:
- Откройте файл таким образом, чтобы показать вам эти ^m. См. MX Find-File-Literally/Path/TO/File выше. В XEMacs вы также можете сделать Cu CX CF и выбрать двоичное кодирование.
- Выберите строку, которую вы хотите заменить, и скопируйте ее, используя MW
- Сделайте M-% (Замените запрос) и вставьте то, что вы хотите скопировать, используя CY
- представьте Enter, когда будет предложено, чтобы заменить его на
- Возможная пресса! Теперь заменить все случаи
Дело в том, что даже если вы не введете, как ввести то, что вы пытаетесь заменить, вы всегда можете выбрать/скопировать его.
(в режиме hexl) Я не уверен, что вы можете Удалить символы. Анкет Я всегда преобразовал их в пространства или какого -то другого персонажа, переключился на обычный текстовый редактор и удалял их там.
Из 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
S в AnyMode.