2009-04-04 1 views

답변

9

이에 여러 가지가 있습니다

  • 당신이 모든 당신이 원하는 포맷 할 EMACS 기능을 마련 할 필요가있다. indent-region이 시작되었지만 사용자는 untabify 또는 다른 것들을 원할 수도 있습니다.
  • 각 파일에서 파일을 호출해야하며 들여 쓰기 기능이 범위에서 작동하므로 전체 파일을 포함하도록 마크를 설정하는 함수가 필요합니다 (mark-whole-buffer).
  • 각 파일에 대해 EMACS를 호출해야합니다. 즉, --batch 파일과 함께 emacs를 호출하는 것입니다.

herehere에 대한 몇 가지 멋진 블로그 게시물이 있습니다.

+0

감사합니다. – Frank

+0

불행히도 블로그 게시물에 대한 링크가 이제 종료되었습니다. – Paul

+0

블로그 게시물이 현재 작동 중입니다. –

2

이 스크립트는 다시 포맷하지 않는다고 생각합니다. 에 설명 된대로 대신 사용자 정의 "스타일"을 구축하는 방법의 예입니다 : CC mode manual - Styles

CC-모드 설명서도 말한다 : 당신이 이전 코드를 포맷 할 경우

, 당신은 개시 아마 더 좋을 것 같아 대신 다른 도구, 예. CC 모드보다 더 강력한 재 포맷 기능을 가진 GNU 들여 쓰기.

CC mode manual - Limitations-and-Known-Bugs

+0

은 음, 그래,하지만 당신은 포맷 할 수 있습니다 스타일을로드하는 데. –

+0

그래, 그래서 스타일을로드하고 들여 쓰기 버퍼 기능을 적용하고 싶습니다. 그런 다음 모든 파일을 사용하여 작업하십시오. – Frank

+0

Reindent, yes. 재 포맷, 안돼. 예를 들어 괄호 앞뒤의 개행은 변경되지 않습니다. –

3

키보드 정의 매크로를 사용하기 전에이 작업을 수행했습니다. 모든 파일을 이맥스 (find . -name "*.cpp" | xargs emacs과 같은)로로드 한 후 다음 키를 입력하십시오. 필자는 각 키 조합의 기능에 주석을 달았습니다.

C-x-(     'Begin recording macro 
M-<     'Go to start of file 
C-space    'Mark current location (now start of file) 
M->     'Go to end of file 
M-x indent-region  'Indent entire file according to coding style 
C-x C-s    'Save the current buffer 
C-x C-k    'Close the current buffer 
C-x-)     'End recording macro 

이제 C-x e을 입력하여 버퍼에서이 작업을 실행할 수 있습니다. 여러 파일을로드 한 경우 C-u 100 C-x e과 같은 것을 실행하여 100 개의 파일에서이 파일을 실행할 수 있습니다. 이 수가 파일 수보다 많으면 OK입니다. 모든 처리가 완료되면 무시할 수있는 "벨소리"또는 기타 오류가 발생합니다.

0

당신이 dired 버퍼에 소스 파일을 표시 한 다음 같은 것을 할 수있는 각을 포맷하는 기능을 실행하려면 :

(defun clean-file(filename) 
    (your-function-goes-here)) 

(defun clean-each-dired-marked-file() 
    (interactive) 
    (for-each-dired-marked-file 'clean-file)) 

(defun for-each-dired-marked-file(fn) 
"Do stuff for each marked file, only works in dired window" 
(interactive) 
(if (eq major-mode 'dired-mode) 
    (let ((filenames (dired-get-marked-files))) 
     (mapcar fn filenames)) 
    (error (format "Not a Dired buffer \(%s\)" major-mode)))) 
관련 문제