2013-01-12 1 views
6

복수의 버퍼로 개별적으로 선택해 각각의 버퍼로 실행하지 않고, 복수의 버퍼로 emacs 커멘드를 실행하는 방법이 있습니까?복수의 emacs 버퍼로 특정의 커멘드를 실행한다

대개 특정 정규식과 일치하는 파일을 여러 개 엽니 다 (예 : ~/*.py을 사용하고 특정 모드 (예 : hs-minor-mode 또는 glasses-mode)를 사용하거나 각각에 대해 C-c @ C-M-h을 실행한다고 가정합니다. 현재 나는 그들 각각을 선택하고 개별적으로해야만한다. 그래서 작업을 자동화하기위한 해킹이나 루프가 있습니다.

버퍼 목록의 버퍼를 표시하고 표시된 모든 명령을 실행한다고 가정 해 보겠습니다.

나는 this을 시도했지만 eval-expression의 명령을 실행 한 후 나는 M-x 미니 버퍼가 반환 입력 할 때마다 나는 완전히 의미, 내 미니 버퍼에 대한 액세스를 잃은이

프로세스 메뉴 모드 '아무튼 "는 미니 버퍼 이맥스 오류에 액세스 할 수 없습니다 Hideshow 보조 모드 "

C-x C-s이 작동하지 않았기 때문에 나는 전체 emacs 프로세스를 실제로 강제 종료했습니다. 둘 다 최종 작업이 아니었기 때문입니다.

PS : 나는 당신은 (그것은 기본 이맥스 분포의 일부)이 대한 모드를 ibuffer 사용할 수 있습니다 elisp

답변

10

경험이없는.

(global-set-key "\C-x\C-b" 'ibuffer) ;; make ibuffer the default 

*Ibuffer*에서는 m에 필요한 버퍼를 표시 할 수 있습니다 다음 는 E 각에서 양식을 실행합니다.

일반적으로 ibuffer은 일반적인 버퍼 목록보다 훨씬 유연하며 나는 ibuffer이 실제로 Emacs의 기본 버퍼 목록이어야한다고 생각합니다.

자주 이렇게 할 경우, 당신은 모드 - 후크에 부착하여 파이썬 모드로 들어갈 때마다에 그 특정 모드를 전환 할 수 있습니다 :

(add-hook 'python-mode-hook 'hs-minor-mode) 
(add-hook 'python-mode-hook 'glasses-mode) 
+0

나는 동의합니다. 갈고리가 가장 좋은 방법 일 것입니다. 원하지 않는다면 몇몇 개별 버퍼의 모드를 끄는 것이 더 쉽습니다! – PascalVKooten

2

내가 ibuffer 그 기능을 몰랐 ! 어쨌든, dired에 익숙한 사람들을 위해, 똑같은 명령이 있습니다. m 또는 다른보다 강력한 방법으로 dired에있는 파일을 선택하십시오. 그런 다음 M-xdired-do-command과 같이 양식이나 명령을 쓰고 M-x과 같이 작성하십시오.

(defun dired-do-command (command) 
    "Run COMMAND on marked files. Any files not already open will be opened. 
After this command has been run, any buffers it's modified will remain 
open and unsaved." 
    (interactive 
    (list 
    (let ((print-level nil) 
      (minibuffer-history-position 0) 
      (minibuffer-history-sexp-flag (1+ (minibuffer-depth)))) 
     (unwind-protect 
      (read-from-minibuffer 
      "Command: " (prin1-to-string (nth 0 command-history)) 
      read-expression-map t 
      (cons 'command-history 0)) 

     ;; If command was added to command-history as a 
     ;; string, get rid of that. We want only 
     ;; evaluable expressions there. 
     (if (stringp (car command-history)) 
      (setq command-history (cdr command-history))))))) 
    (dolist (filename (dired-get-marked-files)) 
    (with-current-buffer (find-file-noselect filename) 
     (if (symbolp command) 
      (call-interactively command) 
     (eval command))))) 
관련 문제