#이맥스리스프: #모든파일 #린터 #포메터 - #디레드 #매크로

#이맥스리스프: #모든파일 #린터 #포메터 - #디레드 #매크로

2023-10-06 Note emacslisp formatter linter notes dired macro

Linting and Formatting All files at once Dired/Macro

;; https://stackoverflow.com/questions/2551632/how-to-format-all-files-under-a-dir-in-emacs

Elisp

[2023-10-06 Fri 23:04]


(defun my/indent-marked-files ()
  (interactive)
  (dolist (file (dired-get-marked-files))
    (find-file file)
    (indent-region (point-min) (point-max))
    (save-buffer)
    (kill-buffer nil)))

;; Next, open a Dired buffer at the top level of the directory under which you
;; want to change all of the files. Give the dired command a numeric prefix so
;; that it will ask for the switches to give to the ls command, and add the R
;; (recurse) switch: C-u C-x d R RET your-directory RET. 그런 다음, 모든 파일을
;; 변경하려는 디렉터리의 최상위 수준에서 Dired 버퍼를 엽니다. dired 명령에 숫자
;; 접두사를 지정하여 ls 명령에 전달할 스위치를 요청하고 R 을 추가합니다. (재귀)
;; 스위치를 추가합니다: C-u C-x d R RET your-directory RET .

;; Next, mark all of the regular files in the recursive directory listing: first
;; * / to mark all the directories, then * t to toggle the selection. 그런 다음
;; 재귀적 디렉터리 목록에 있는 모든 일반 파일을 표시합니다. 먼저 * / 을 눌러
;; 모든 디렉터리를 표시한 다음 * t 을 눌러 선택 항목을 전환합니다.

;; Finally, run the above command: M-x indent-marked-files.

;; Be aware that if you already have any buffers visiting any of the target
;; files, they'll be killed by indent-marked-files. Also be aware that none of
;; the file changes will be undoable; use with caution! I tested it in a simple
;; case and it seems to work as described, but I make no guarantees. 대상 파일을
;; 방문하는 버퍼가 이미 있는 경우 indent-marked-files 에 의해 버퍼가 종료된다는
;; 점에 유의하세요. . 또한 어떤 파일 변경도 되돌릴 수 없으므로 주의해서
;; 사용하세요! 간단한 케이스에서 테스트해 본 결과 설명대로 작동하는 것 같지만,
;; 보장할 수는 없습니다.

;; ~/.spacemacs.d/layers/ .el
;; https://stackoverflow.com/questions/2551632/how-to-format-all-files-under-a-dir-in-emacs
(defun my/indent-files (directory extension)
  (interactive (list (read-directory-name "Directory: ")
                     (read-string "File extension: ")))
  (dolist (file (directory-files-recursively directory extension))
    (find-file file)
    (indent-region (point-min) (point-max))
    (save-buffer)
    (kill-buffer nil)))

Macro

[2023-10-06 Fri 23:01]


Create a macro to do it. Open the directory in dired (C-x d), and then:
매크로를 만들어 실행합니다. dired ( C-x d )에서 디렉터리를 엽니다:

    Put point on the first file.
    첫 번째 파일에 포인트를 넣습니다.
    Press F3 to start recording the macro.
    매크로 녹화를 시작하려면 F3 을 누릅니다.
    Hit RET to open the file.
    0}}을 눌러 파일을 엽니다.
    Format it with C-x h, C-M-\.
    Bury the buffer with M-x bury-buffer. You'll be back in the dired buffer.
    Go down one line.
    Hit F4 to stop recording the macro.
    매크로 기록을 중지하려면 F4 을 누르세요.

So now you have a macro that opens the file on the current line, formats it, drops back to dired, and puts point to the next line. Run it with F4 as many times as needed.
이제 현재 줄에서 파일을 열고 서식을 지정한 다음 다시 dired로 떨어뜨리고 다음 줄을 가리키는 매크로가 생겼습니다. 필요한 만큼 F4 으로 실행하세요.
Share
Improve this answer
Follow
answered Mar 31, 2010 at 12:31
legoscia's user avatar
legoscia
39.7k2222 gold badges116116 silver badges167167 bronze badges

    1
    I think this should be marked as the correct answer for its simplicity. Instead of M-x bury-buffer, I prefer killing it C-x k.
    단순하기 때문에 정답으로 표시해야 한다고 생각합니다. 대신 M-x bury-buffer 대신 C-x k .

Related-Notes

References

마지막 수정일자