2008-10-24 4 views
4

Я пишу конфигурационный файл, и мне нужно определить, ожидает ли процесс файл формата Windows или файл формата unix. У меня есть копия ожидаемого файла - есть ли способ проверить, использует ли он \ n или \ r \ n, не выходя из emacs?определение терминатора линии в Emacs

ответ

7

Если он говорит (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"))))) 
+0

Предполагается, что вы не работаете в Windows. Там, modeline будет \ for \ r \ n или (Unix) для \ n. – cjm 2008-10-24 18:20:24

+0

Неужели OP хочет программное решение, а не визуальный контроль модели? – 2008-10-24 20:51:27

+0

Нет! хотел визуальный, хотя elsip приятно иметь. – gone 2009-03-05 21:50:49

0

Открыть файл в emacs, используя find-file-literally. Если строки имеют символы^M в конце, он ожидает текстовый файл в формате Windows.

0

Следующая функция 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)) 
2

Если вы идете в Hexl режиме (M-х Hexl режиме), вы Шоул увидеть окончание линии байтов.

 Смежные вопросы

  • Нет связанных вопросов^_^