Как найти и удалить невидимые символы в текстовом файле с помощью emacs - PullRequest
10 голосов
/ 07 октября 2011

У меня есть текстовый файл с именем COPYING, который редактируется в Windows. Он содержит стиль Windows EOL

$ file COPYING 
COPYING: ASCII English text, with CRLF line terminators

Я попытался преобразовать его в стиль Unix, используя dos2unix. Ниже вывод

$ dos2unix COPYING 
dos2unix: Skipping binary file COPYING

Я был удивлен, обнаружив, что программа dos2unix сообщает об этом в виде двоичного файла. Затем, используя какой-то другой редактор (не emacs), я обнаружил, что файл содержит управляющий символ. Мне интересно найти все невидимые символы в файле, используя emacs.

По Google, я нашел следующее решение, которое использует tr

tr -cd '\11\12\40-\176' < file_name

Как сделать то же самое в Emacs. Я попробовал режим hexl. Hexl-mode показывает текст и соответствующие ему значения ascii в одном буфере, что здорово. Как найти символы, которые имеют значения ASCII, отличные от 11-12, 40-176 (т. Е. Табуляция, пробел и видимые символы). Я пытался создать регулярное выражение для этого поиска, но это довольно сложно.

Ответы [ 3 ]

13 голосов
/ 07 октября 2011

Чтобы увидеть невидимых символов, вы можете попробовать whitespace-mode. Пробелы и вкладки будут отображаться с символом на другом лице. Если система кодирования автоматически определяется как dos (в строке состояния отображается (DOS)), возврат каретки в конце строки также будет скрыт. Запустите revert-buffer-with-coding-system, чтобы переключить его в Unix или двоичный файл (например, C-x RET r unix ), и они всегда будут отображаться как ^M. Система двоичного кодирования будет отображать любые не-ASCII символы в качестве управляющих символов.

3 голосов
/ 08 октября 2011

Emacs по умолчанию не скрывает никаких символов.Нажмите Ctrl + Мета + % или Esc , затем Ctrl + % , еслипервый слишком тяжел для ваших пальцев, или M-x replace-regexp RET, если вы предпочитаете.Затем для регулярного выражения введите

[^@-^H^K-^_^?]

Однако, где я написал ^H, введите Ctrl + Q затем Ctrl + H , чтобы буквально ввести символ «control-H», и аналогично для остальных.Вы можете нажать Ctrl + Q , затем Ctrl + Пробел для ^@, и обычно Ctrl + Q , затем Backspace для ^?.Замените все вхождения этого регулярного выражения пустой строкой.

Поскольку у вас есть файл, открытый в Emacs, вы можете изменить его окончания строк, пока вы в нем.Нажмите C-x RET f ( Ctrl + X Return F ) и введите us-ascii-unix в качестве новой требуемой кодировки для файла.

1 голос
/ 07 октября 2011

Выезд M-x set-buffer-file-coding-system.Из документации:

(set-buffer-file-coding-system CODING-SYSTEM &optional FORCE NOMODIFY)

Установите для системы кодирования файлов текущего буфера значение CODING-SYSTEM.Это означает, что при сохранении буфера он будет преобразован в соответствии с CODING-SYSTEM.Для получения списка возможных значений CODING-SYSTEM используйте Mx list-coding-systems.

Итак, переходя от DOS к UNIX, M-x set-buffer-file-coding-system unix.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...