सभी बफ़र बंद करें


23

कभी-कभी मेरी बफ़र सूची में 10+ dired विंडो होती हैं, और मैं अंत में buffer-menuमैन्युअल रूप से चिह्नित करने और उन सभी को मारने का उपयोग करता हूं। क्या सभी खुली हुई खिडकियों को बंद करने का एक तेज़ तरीका है?


मैंने उस उत्तर को स्वीकार कर लिया है जो सबसे सीधे प्रश्न का उत्तर देता है। हालाँकि, मैंने तब से रोकथाम का एक औंस लागू करना शुरू कर दिया है: emacs.stackexchange.com/a/1041/93
nispio

जवाबों:


32

आप निम्नलिखित कर सकते हैं:

M-x ibuffer

* / बिंदीदार मोड में बफ़र्स चिह्नित करने के लिए।

D उन्हें हटाने के लिए।


1
मैंने पहले कभी ibuffer के बारे में नहीं सुना था। मैं निश्चित रूप से मानचित्रण हो जाएगा C-x C-bकरने के लिए ibuffer
nispio

आप सभी को चिह्नित करने के लिए t( dired-toggle-marks) भी दबा सकते हैं (यदि कोई भी पहले से चिह्नित नहीं था)।
caisah

@caisah dired-toggle-marksका नाम है dired आदेश। दबाने tसे भी ibuffer में सभी निशान टॉगल हो सकते हैं, लेकिन गैर-बफ़र किए गए बफ़र्स आमतौर पर डेयर किए गए बफ़र्स को पछाड़ देते हैं, इसलिए टॉगल करना अक्सर इस संदर्भ में समझ में नहीं आता है।
nispio

@nispio आप सही हैं। मैं क्यों नहीं पता है, लेकिन मैं सोच रहा था सब बफ़र्स गया dired ...
caisah

1
ध्यान दें: यह सही ढंग से काम नहीं करता है जब वहाँ कोई बफ़र नहीं होते हैं, क्योंकि डी, बफ़र किए गए बफ़र्स पर लागू नहीं होगा, लेकिन सूची में पहले बफर पर।
daniel kullmann

10

सभी diredबफ़र्स को मारने के लिए एक और फ़ंक्शन जोड़ने के बजाय , मेरा सुझाव है कि आप इसमें फ़िल्टर समूहों का लाभ उठाएँ ibuffer, यह आपको कई स्थिति में समूह बफ़र की अनुमति देता है।

यहां फ़िल्टर समूहों को सेट करने के लिए एक उदाहरण दिया गया है:

(setq-default ibuffer-saved-filter-groups
              `(("Default"
                 ;; I create a group call Dired, which contains all buffer in dired-mode
                 ("Dired" (mode . dired-mode))
                 ("Temporary" (name . "\*.*\*"))
                 )))

फिर C-x C-bखुला ibufferखिड़की, आप कुछ इस तरह देख सकते हैं:

उदाहरण 1

ले जाएँ कर्सर को [ Dired ](के साथ M-p, M-n), तो प्रेस dहटाने के रूप में चिह्नित करने के लिए

example2

फिर xनिष्पादित करने के लिए दबाएँ ।

मैं इस तरह से पसंद करता हूं क्योंकि मुझे यह सोचने की ज़रूरत नहीं है कि मुझे नए फ़ंक्शन के लिए अपनी कुंजी कैसे बांधनी चाहिए, और मेरे बफ़र्स बेहतर व्यवस्थित हैं।


जब मैंने पहली बार ibufferआपके कोड का मूल्यांकन करने के बाद लॉन्च किया था, तो फ़िल्टर समूह मेरे लिए प्रदर्शित नहीं हुए थे । मुझे समूहों को प्राप्त करने के लिए / R(बाध्य ibuffer-switch-to-saved-filter-groups) होना पड़ा ।
इसका अजायबघर

(ibuffer-switch-to-saved-filter-groups "Default")आप ibuffer हुक में कोड की इस पंक्ति को जोड़ सकते हैं, फ़िल्टर समूहों का नाम बदल दिया जाना चाहिए यदि यह नहीं हैDefault
Rangi Lin

1
हां, यही मैंने किया। अपने उत्तर को पढ़ने से पहले फ़िल्टर समूहों के बारे में नहीं जानते थे, उनका उल्लेख करने के लिए धन्यवाद;)
itsjeyd

10

क्या आपके पास कई डेयरेड बफ़र्स हैं क्योंकि आप उन सभी को एक बिंदु पर चाहते थे ? IOW, क्या आप उनमें से प्रत्येक को अलग-अलग बफ़र के रूप में बनाना चाहते हैं ?

यदि नहीं, तो समाधान सरल है: जब आप किसी निर्देशिका नाम को Dired में खोलने के लिए हिट करते हैं, तो एक मौजूदा Dired बफर का पुन: उपयोग करने के लिए Dired को बताएंRET

यहाँ है कि कैसे करना है:

  1. लोड लाइब्रेरी Dired + ( dired+.el):

    (require 'dired+)
    
  2. बताइए Dired बफ़र्स का फिर से उपयोग

    (diredp-toggle-find-file-reuse-dir 1)
    

इसका प्रभाव यह है कि जब आप RETDired में किसी डायरेक्टरी पर हिट (या माउस को क्लिक करते हैं) find-alternate-fileका उपयोग किया जाता है, तो मूल Dired बफर को नए द्वारा बदल दिया जाता है (हटा दिया जाता है)।

आप इस व्यवहार को कभी भी टॉगल कर सकते हैं, C-M-R(उर्फ C-M-S-r) Dired में।


यह वह समाधान है जो मैंने अभी तय किया है। मैं पहली बार में 20 ओपन डेयरिंग बफ़र्स कभी नहीं चाहता था। यह सुझाव देने के लिए धन्यवाद (और इसे बनाने के लिए।)
nispio

लिंक मृत हैं, एक 404 हो रही है: (
ज़ेलफिर कल्टस्टाहल

1
@Zelphir: हेड-अप के लिए धन्यवाद। अब ठीक होना चाहिए। (Emacs Wiki ने अपने URL को आम तौर पर बदल दिया, इसलिए इस तरह के पुराने पोस्टों को टूटे हुए लिंक मिल गए।)
Drew

8

कुछ इस तरह (स्क्रॉल थोड़ा)?

(defun kill-dired-buffers ()
     (interactive)
     (mapc (lambda (buffer) 
           (when (eq 'dired-mode (buffer-local-value 'major-mode buffer)) 
             (kill-buffer buffer))) 
         (buffer-list)))

5

आप यह भी उपयोग कर सकते हैं helm-mini:

  • भागो M-x helm-mini
  • प्रॉम्प्ट में टाइप करें: *Di(आंशिक शब्द के लिए Dired, अधिक दर्ज करने की आवश्यकता नहीं है)। जैसा कि आप टाइप करते हैं, बफ़र्स को आकस्मिक रूप से संकुचित किया जाता है। अब, केवल Diredबफर बचा है। M-aसभी को चिह्नित करने के लिए दबाएँ ।
  • प्रेस TABकार्रवाई मेनू और प्रेस करने के लिए स्विच करने के लिए Kकार्रवाई का चयन करने के Kill buffer(s)
  • RETकार्रवाई निष्पादित करने के लिए दबाएं ।

इसके साथ अच्छी बात helm-miniयह है कि यह सामान्य एमएसीएस को बदल सकता है C-x b, इसलिए आपको दो प्रमुख बाइंडिंग का उपयोग नहीं करना होगा, एक बफर को स्विच करने के लिए और एक वास्तविक बफर मैनेजर के लिए। helm-miniसभी में एक है। मेरे हेल्म-मिनी गाइड में और पढ़ें ।

helm-miniफजी मैच बफर भी कर सकते हैं C-SPCया M-a( या एम आर्क एल के लिए खड़े होकर ) चिह्नित करके कई बफ़र्स खोलने की अनुमति दे सकते हैं । आप बफर को संकीर्ण भी कर सकते हैं @एक पैटर्न से पहले जोड़कर कुछ स्ट्रिंग होती है , उदाहरण के लिए, @testइसका मतलब है कि केवल बफ़र्स में स्ट्रिंग "परीक्षण" होता है।


1

मैं कुछ इस तरह की कोशिश करेंगे:

(require 'dash)

(defun my-kill-dired-buffers ()
  (interactive)
  (kill-some-buffers
   (-filter (lambda (buffer)
              (save-excursion
                (set-buffer buffer)
                (eq major-mode 'dired-mode)))
            (buffer-list))))

1
मेरा मानना ​​है कि MELPA की -filterआवश्यकता dash.elहै। आपको संभवतः एक आवश्यकता के रूप में सूची देनी चाहिए।
वमसी

1

आप वास्तव में जिस चीज की तलाश कर रहे हैं, वह अवांछित बफ़र्स को स्वचालित रूप से साफ करने का एक तरीका है, इस मामले में आपको जांच करनी चाहिए midnight.el, जो एमर्स का हिस्सा है।

लेकिन आम तौर पर बोलना, ibufferथोक में बफ़र्स पर काम करना बहुत आसान बनाता है, जैसा कि फ्रांसिस्को ने सुझाव दिया था।


1

यदि आप आइकल्स का उपयोग करते हैं , तो आप C-x kकिसी भी दिए गए मोड में सभी डेयरेड बफ़र्स - या सभी बफ़र्स को मारने के लिए उपयोग कर सकते हैं ।

मारने के बाद C-x k, C-x M +एक निश्चित मोड के साथ केवल बफ़र्स रखने के लिए उपयोग करें। TABमोड देखने के लिए मारो , और चुनें dired-mode। फिर उस मोड के साथ सभी बफ़र्स C-!को मारने के लिए उपयोग करें।

C-x k C-x M + dired-mode C-!
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.