2013-01-12 7 views
6

Gibt es eine Möglichkeit, den Befehl emacs für mehrere Puffer auszuführen, ohne sie einzeln auswählen und auf jedem einzelnen Puffer ausführen zu müssen.Ausführen eines bestimmten Befehls für mehrere Emacs-Puffer

Ich öffne normalerweise mehrere Dateien, die einer bestimmten Regex entsprechen, z. ~/*.py und möchten einen bestimmten Modus aktivieren, sagen wir hs-minor-mode oder glasses-mode auf jedem, oder sagen Sie C-c @ C-M-h auf jedem ausführen. Momentan muss ich jeden auswählen und individuell machen. Also gibt es einen Hack oder eine Schleife, um die Aufgabe zu automatisieren.

Sagen wir, ich markiere die Puffer aus der Pufferliste und dann den Befehl für alle markierten.

versuchte ich this aber nachdem ich die Befehle in eval-expression Ausführung I vollständig Zugriff auf meine Minipuffer verloren, was bedeutet, wenn ich M-x der Minipuffer diese

zurück getippt

nicht in der Lage für den Zugriff auf den Minipuffer Emacs Fehler „Prozessmenümodus doesn‘ t Unterstützung Ausblendenanzeigen Minor Mode“

und ich war gezwungen, um tatsächlich die gesamte emacs-Prozess zu beenden, weil die C-x C-s nicht funktionierte weder die Task beenden war.

PS: Ich habe keine Erfahrung in elisp

Antwort

10

können Sie für diesen Einsatz Befehlspufferspeicher-Modus (Es ist Teil der Standard-Emacs-Distribution ist).

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

In *Ibuffer* können Sie die erforderlichen Puffer mit m markieren und dann ein Formular in die jeweils mit E auszuführen.

Im Allgemeinen ist ibuffer viel flexibler als die übliche Pufferliste und ich denke, ibuffer sollte wirklich die Standard-Pufferliste in Emacs sein.

Wenn Sie dies oft tun, Sie könnten Sie Python-Modus wechseln möchten diese speziellen Modi jedes Mal eingeben, indem sie auf den Modus-Haken Befestigung:

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

Ich stimme zu, wahrscheinlich sind die Haken der beste Weg zu gehen. Wenn Sie sie nicht möchten, wäre es einfacher, den Modus für einige einzelne Puffer auszuschalten! – PascalVKooten

2

Ich wusste nicht, diese Funktion hatte Befehlspufferspeicher ! Wie auch immer, für diejenigen, die Dired besser kennen, hier ist ein Befehl, der das gleiche tut. Wählen Sie die Dateien mit m oder einer anderen leistungsfähigeren Methode aus. Dann tun, M-x und schreiben Sie ein Formular oder einen Befehl wie in 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))))) 
Verwandte Themen