2013-01-12 11 views
6

Tek tek seçerek ve her bir arabelleğin üzerinde yürütmek zorunda kalmadan çoklu arabelleklerde emacs komutunu yürütmenin bir yolu var mı.Birden çok emacs arabelleğe özel bir komut yürütme

Genellikle belirli bir normal ifadeyle eşleşen birden çok dosyayı açarım, ör. ~/*.py ve belirli bir modu etkinleştirmek isterseniz, her birinde hs-minor-mode veya glasses-mode deyin ya da her birinde C-c @ C-M-h komutunu uygulayın. Şu anda bunların her birini seçip ayrı ayrı yapmak zorundayım. Yani görevi otomatikleştirmek için bir hack veya bir döngü var.

Tamponları arabellek listesinden işaretlediğimi ve sonra işaretlenmiş olanların komutunu çalıştırdığımı söyleyelim.

Ben this çalıştı ama eval-expression komutları yürüttükten sonra ben M-x minibuffer döndü yazdığınız zaman ben tamamen anlam benim minibuffer erişimi kaybetti bu

Süreç Menü Modu kokan" minibuffer emacs hatayı erişemiyor Minör Modu"

ve ben C-x C-s ne sonu Görev oldu çalışmadığı için aslında tüm emacs süreci öldürmek zorunda kaldığı GizleGöster t desteği.

PS: Ben Sen (Varsayılan Emacs dağıtım parçasıdır) Bunun için modu ibuffer kullanabilirsiniz elisp

cevap

10

hiçbir deneyimim var.

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

*Ibuffer* size m ile gerekli tamponlarını işaretleyebilir ve daha sonra E her bir form yürütün.

Genel olarak, ibuffer çok daha esnek olan her zamanki arabellek listesidir ve bence ibuffer gerçekten Emacs'deki varsayılan arabellek listesi olmalıdır.

Sık sık bu yaparsanız, mod-kancaya takarak sen piton moduna girmek her zaman özellikle bu modlar arasında geçiş isteyebilirsiniz:

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

Katılıyorum, muhtemelen kancalar gitmek için en iyi yoldur. Eğer onları istemezseniz, bazı ayrı tamponlar için modu kapatmak daha kolay olurdu! – PascalVKooten

2

ben ibuffer bu özelliği olduğunu bilmiyordum ! Her neyse, yönlendirmeye daha aşina olanlar için, aynısını yapan bir komut. Dosyaları, m veya başka herhangi bir güçlü yöntemle seçin. Sonra M-xdired-do-command yapın ve M-x'daki gibi bir form veya komut yazın.

(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))))) 
İlgili konular