2008-10-24 56 views
4

我在寫一個配置文件,我需要定義過程是否需要一個Windows格式文件或unix格式文件。我有一份預期文件的副本 - 有沒有一種方法可以檢查它是否使用\ n或\ r \ n而不退出emacs?確定Emacs中的行終止符

回答

7

如果在Unix上打開文件時在模式行上顯示(DOS),則行結束符爲Windows風格。如果它在Windows上打開文件時說(Unix),則行結束符是Unix樣式。

從Emacs的22.2手冊(節點:模式線):

如果緩衝器的文件使用 回車換行,結腸 改變到任何一個反斜槓(「\」)或 「( 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

使用find-file-literally在emacs中打開文件。如果行末尾有^ 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-x hexl-mode),則可以看到行結束字節。