Я пишу конфигурационный файл, и мне нужно определить, ожидает ли процесс файл формата Windows или файл формата unix. У меня есть копия ожидаемого файла - есть ли способ проверить, использует ли он \ n или \ r \ n, не выходя из emacs?определение терминатора линии в Emacs
ответ
Если он говорит (DOS) о моделировании при открытии файла в Unix, окончание строк - это стиль Windows. Если он говорит (Unix), когда вы открываете файл в Windows, окончание строки - это стиль Unix.
Из Emacs 22.2 вручную (Node: Режим Line):
Если файл в буферную использует возврат каретки-перевод, двоеточие изменения либо обратной косой черты ('\') или «(DOS) ', в зависимости от операционной системы . Если в файле используется только возврат каретки, указатель двоеточия изменяет либо косую черту ('/'), либо '(Mac)'. В некоторых системах Emacs отображает «(Unix)» вместо двоеточия для файлов, использующих новую строку, как разделитель строк.
Вот функция, которая – я думаю – показывает, как проверить из Elisp, что Emacs определил, что тип линии окончаний. Если это выглядит чрезмерно сложным, возможно, это так.
(defun describe-eol()
(interactive)
(let ((eol-type (coding-system-eol-type buffer-file-coding-system)))
(when (vectorp eol-type)
(setq eol-type (coding-system-eol-type (aref eol-type 0))))
(message "Line endings are of type: %s"
(case eol-type
(0 "Unix") (1 "DOS") (2 "Mac") (t "Unknown")))))
Открыть файл в emacs, используя find-file-literally. Если строки имеют символы^M в конце, он ожидает текстовый файл в формате Windows.
Следующая функция Elisp вернет nil
, если нет "\r\n"
терминаторов появляются в файле (в противном случае она возвращает точку первого вхождения). Вы можете поместить его в свой .emacs
и назовите его M-x check-eol
.
(defun check-eol (FILE)
(interactive "fFile: ")
(set-buffer (generate-new-buffer "*check-eol*"))
(insert-file-contents-literally FILE)
(let ((point (search-forward "\r\n")))
(kill-buffer nil)
point))
Если вы идете в Hexl режиме (M-х Hexl режиме), вы Шоул увидеть окончание линии байтов.
Предполагается, что вы не работаете в Windows. Там, modeline будет \ for \ r \ n или (Unix) для \ n. – cjm 2008-10-24 18:20:24
Неужели OP хочет программное решение, а не визуальный контроль модели? – 2008-10-24 20:51:27
Нет! хотел визуальный, хотя elsip приятно иметь. – gone 2009-03-05 21:50:49