2008-10-24 12 views
4

구성 파일을 쓰고 있는데 프로세스에 windows 형식 파일이나 유닉스 형식 파일이 필요한지를 정의해야합니다. 나는 기대 한 파일의 복사본을 가지고있다 - emacs를 종료하지 않고 \ n 또는 \ r \ n을 사용 하는지를 확인할 수있는 방법이 있는가?Emacs에서 줄 종결자를 결정하십시오.

답변

7

유닉스에서 파일을 열 때 modeline에서 (DOS)라고 말하면 줄 끝은 Windows 스타일입니다. Windows에서 파일을 열 때 (Unix)라고 말하면 줄 끝은 Unix 스타일입니다. 이맥스 22.2 매뉴얼 (: 모드 라인 노드)에서

버퍼의 파일이 변경 백 슬래시 하나에 캐리지 리턴 줄 바꿈, 콜론을 사용하는 경우 ('\') 또는 '(DOS) '운영 체제에 따라 다릅니다. 시스템. 파일에 캐리지 리턴이 사용 된 경우 콜론 표시기 은 슬래시 ('/') 또는 '(Mac)'로 변경됩니다. 어떤 시스템에서는 이맥스는 줄 바꿈 문자 인 으로 줄 바꿈을 사용하는 파일의 경우 콜론 대신 '(Unix)'를 표시합니다.

여기 – 내가 – 이맥스 라인 엔딩의 종류로 결정 것을 elisp에서 확인하는 방법을 보여줍니다 생각하는 기능입니다. 그것이 과도하게 복잡하게 보인다면 아마도 그렇습니다. 더 "\r\n" 터미네이터가 파일에 표시하지 않는 경우

(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이거나 \ n (Unix) 일 것입니다. – cjm

+0

확실히 OP는 프로그램 방식의 솔루션을 원하지만 모델 라인의 육안 검사가 필요하지 않습니까? –

+0

아니요! 시각적 인 것을 원했지만, elsip은 가지고있는 것이 좋았습니다. – gone

0

find-file-literally를 사용하여 이맥스에서 파일을 엽니 다. 행 끝에^M 기호가 있으면 Windows 형식 텍스트 파일이 필요합니다.

0

다음 Elisp 기능이 nil를 반환합니다 (그렇지 않으면 처음 나타나는 점을 반환). .emacs에 넣고 M-x check-eol으로 부를 수 있습니다. 당신이 hexl 모드 (M-X의 hexl 모드)에 가면

(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)) 
+0

그러나 Emacs의 최신 버전은 로딩 할 때 CRLF를 LF로 변환하므로 저장시 다시 버퍼에 \ r 문자가 없습니다. 버퍼의 코딩 시스템을 확인해야합니다. – cjm

+0

find-file과 함께 작동하지 않습니까? –

+0

예, 그렇지만, find-file을 먼저 사용하는 것에 대해서는 언급하지 않았습니다. – cjm

2

, 당신은 라인 종단 바이트를 참조 말아야.

+0

와우, 고마워. –