IT TIP

emacs에서 ^ M 숨기기

itqueen 2020. 12. 29. 08:11
반응형

emacs에서 ^ M 숨기기


줄 끝에 ^ M (control-M)이있는 로그 파일을 읽어야하는 경우가 있습니다. 이를 제거하기 위해 전역 교체를 수행 할 수 있지만 로그 파일에 더 많은 내용이 기록되고 물론 모두 다시 돌아옵니다.

unix 스타일 또는 dos 스타일 end-of-line 인코딩 설정은 큰 차이가없는 것 같습니다 (그러나 unix 스타일이 기본입니다). 미정 (unix | dos) 코딩 시스템을 사용하고 있습니다.

나는 Windows에서 log4net이 만든 로그 파일을 읽고 있습니다 (물론 log4net 이이 성가심의 유일한 원인은 아니지만).

힌트가 있습니까?


(defun remove-dos-eol ()
  "Do not show ^M in files containing mixed UNIX and DOS line endings."
  (interactive)
  (setq buffer-display-table (make-display-table))
  (aset buffer-display-table ?\^M []))

Johan Bockgård의 솔루션. 여기 에서 찾았습니다 .


최신 버전의 emacs는 UNIX와 DOS 줄 끝을 모두 처리하는 방법을 알고 있으므로 ^ M이 파일에 나타나면 파일에 둘 다 혼합되어 있음을 의미합니다. 이러한 혼합이있는 경우 emacs는 기본적으로 UNIX 모드로 설정되므로 ^ M이 표시됩니다. 실제 수정은 일관된 줄 끝을 사용하도록 파일을 만드는 프로그램을 수정하는 것입니다.


이건 어떤가요?

C-x RET c dos RET C-x C-f FILENAME RET

두 줄로 된 파일을 만들었고 두 번째 줄에는 캐리지 리턴이 있습니다. Emacs는 Unix 코딩으로 파일을 열 것이며 코딩 시스템 전환은 아무 일도하지 않습니다. 그러나 universal-coding-system-argument위의 작동합니다.


로그 파일을보고 실제로 바꾸지 않고 단순히 ^ M을 숨기려면 Drew Adam의 하이라이트 확장 을 사용하면됩니다.

elisp 코드를 작성하거나 키보드 매크로를 만들어 다음을 수행 할 수 있습니다.

select the whole buffer
hlt-highlight-regexp-region
C-q C-M
hlt-hide-default-face

먼저 ^ M을 강조 표시 한 다음 숨 깁니다. 다시 원한다면`hlt-show-default-face '를 사용하세요


파일이 사용하는 라인 코딩 시스템을 Unix 형식으로 변경할 수 있다고 생각합니다.

C-x RET f UNIX RET

그렇게하면 모드 행이 "(Unix)"라는 단어를 추가하도록 변경되고 모든 ^ M이 사라집니다.


Edric의 대답은 더 많은 관심을 끌 것입니다. Johan Bockgård의 솔루션은 ^ M이 보이지 않게 만드는 한 포스터의 불만을 해결하지만 근본적인 문제를 가릴 뿐이며 Unix와 DOS 라인 엔딩의 추가 혼합을 권장합니다.

적절한 해결책은 모든 줄 끝을 DOS (또는 경우에 따라 Unix)로 M-x replace-regexp바꾸는 전역 작업을 수행하는 것입니다. 그런 다음 파일을 닫았다가 다시 열면 ( 충분한 지 확실하지 않음 ) ^ M이 모두 표시되지 않거나 모두 사라집니다.M-x revert-buffer


Ctrl-M ( ^M) 문자 의 표시 테이블 항목을 변경하여 공백으로 표시하거나 완전히 사라지도록 (공백) 할 수 있습니다. 영감을 얻으 려면 라이브러리 pp-c-l.el( Pretty Control-L ) 의 코드를 참조하십시오 . ^L임의의 방식으로 문자를 표시합니다 .

편집 됨 : 죄송합니다. @binOr가 이미이 방법을 언급했음을 알았습니다.


이것을 .emacs에 넣으십시오.

(defun dos2unix ()
  "Replace DOS eolns CR LF with Unix eolns CR"
  (interactive)
    (goto-char (point-min))
      (while (search-forward "\r" nil t) (replace-match "")))

이제 dos2unix모든 ^M문자를 간단히 호출 하고 제거 할 수 있습니다 .


dos2unix, unix2dos (현재 tofrodos )를 사용하는 것은 어떻습니까?


^MGnus에서받은 메일에서 s 를 발견 하면 W c(wash CRs)를 사용하거나

(setq gnus-treat-strip-cr t)

sudeepdino008의 답변이 저에게 효과가 없었습니다 (그의 답변에 대해 언급 할 수 없었으므로 내 답변을 추가해야했습니다.).

이 코드를 사용하여 수정할 수있었습니다.

(defun dos2unix ()
  "Replace DOS eolns CR LF with Unix eolns CR"
  (interactive)
    (goto-char (point-min))
      (while (search-forward (string ?\C-m) nil t) (replace-match "")))

binOr처럼 Windows의 % APPDATA % .emacs.d \ init.el 또는 구성 위치에 이것을 추가하십시오.

;; Windows EOL
(defun hide-dos-eol ()
  "Hide ^M in files containing mixed UNIX and DOS line endings."
  (interactive)
  (setq buffer-display-table (make-display-table))
  (aset buffer-display-table ?\^M []))

(defun show-dos-eol ()
  "Show ^M in files containing mixed UNIX and DOS line endings."
  (interactive)
  (setq buffer-display-table (make-display-table))
  (aset buffer-display-table ?\^M ?\^M))

(add-hook 'text-mode-hook 'hide-dos-eol)

참조 URL : https://stackoverflow.com/questions/730751/hiding-m-in-emacs

반응형