2013-01-12 13 views
6

क्या एकाधिक बफर पर उन्हें अलग-अलग चुनने और प्रत्येक व्यक्तिगत बफर पर निष्पादित किए बिना emacs कमांड निष्पादित करने का कोई तरीका है।एकाधिक emacs बफर पर एक विशेष कमांड निष्पादित करें

मैं आमतौर पर एक विशेष regex से मेल खाने वाली कई फाइलें खोलता हूं, उदा। ~/*.py और प्रत्येक पर एक विशेष मोड सक्षम करना चाहते हैं, hs-minor-mode या glasses-mode प्रत्येक पर कहें, या प्रत्येक पर C-c @ C-M-h निष्पादित करें। वर्तमान में मुझे उनमें से प्रत्येक का चयन करना है और इसे व्यक्तिगत रूप से करना है। तो कार्य को स्वचालित करने के लिए एक हैक या लूप है।

आइए कहें कि मैं बफर को बफर सूची से चिह्नित करता हूं और फिर चिह्नित सभी के लिए आदेश चलाता हूं।

मैं this की कोशिश की लेकिन eval-expression में आदेशों को क्रियान्वित करने के बाद मैं पूरी तरह से मेरी minibuffer पर पहुंच खो दी, जिसका अर्थ है जब भी मैं आपके द्वारा लिखा गया M-x minibuffer लौटे इस

"minibuffer Emacs त्रुटि का उपयोग करने की प्रक्रिया मेनू मोड नहीं करता है 'में असमर्थ का समर्थन नहीं Hideshow माइनर मोड "

और मैं वास्तव में क्योंकि C-x C-s काम कर रहा था न अंत टास्क था पूरे Emacs प्रक्रिया को मारने के लिए मजबूर किया गया।

पुनश्च: मैं elisp

उत्तर

10

में कोई अनुभव नहीं है आप ibuffer इस के लिए मोड का उपयोग कर सकते हैं (यह डिफ़ॉल्ट रूप Emacs वितरण का हिस्सा है)।

(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 कि विशेषता थी नहीं पता था ! वैसे भी, जो लोग थके हुए से अधिक परिचित हैं, उनके लिए एक ऐसा आदेश है जो वही करता है। m या किसी अन्य शक्तिशाली विधि के साथ डाले गए फ़ाइलों का चयन करें। फिर करें, एम-एक्सdired-do-command और एम-एक्स में एक फॉर्म या कमांड लिखें।

(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))))) 
संबंधित मुद्दे