Tüm yönlendirilmiş arabellekleri kapat


23

Bazen arabellek listemde 10'dan fazla pencere var buffer-menuve hepsini el ile işaretlemek ve öldürmek için kullanıyorum . Tüm açık pencereleri kapatmanın daha hızlı bir yolu var mı?


Soruyu en doğrudan cevaplayan cevabı kabul ettim. Ancak, o zamandan beri önlem almayı
— nispio 14:14

Yanıtlar:


32

Aşağıdakileri yapabilirsiniz:

M-x ibuffer

* / Arabelleğe alınan modda işaretlemek için kullanılır.

D onları silmek için.


1
Ibuffer'ı daha önce hiç duymamıştım. Kesinlikle haritalama olacaktır C-x C-biçin ibuffer.
— nispio

Tümünü işaretlemek için t( dired-toggle-marks) düğmesine de basabilirsiniz ( önceden işaretlenmemişse).
— caisah

@caisah dired-toggle-marksadıdır dired komuta. Basmak tdeğiştirilirken genellikle bu bağlamda mantıklı değil bu yüzden, ibuffer tüm işaretleri, ama genelde dired tampon outnumber olmayan dired tampon geçiş de olacaktır.
— nispio

@nispio Haklısın. Ben neden bilmiyorum, ama tüm tamponlar edildi düşünüyordum dired ...
— caisah

1
Not: Bu, hiçbir dizinli arabellek olmadığında düzgün çalışmaz, çünkü D, dizinli arabelleklere değil, listedeki ilk ara belleğe uygulanır.
— daniel kullmann

10

Tüm diredtamponları öldürmek için başka bir işlev eklemek yerine, filtre gruplarından faydalanmanızı öneririm ibuffer, tamponu birçok koşulla gruplandırmanıza izin verir.

Filtre gruplarını ayarlamak için bir örnek:

(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 . "\*.*\*"))
                 )))

Sonra pencereyi C-x C-baçın ibuffer, şöyle bir şey görebilirsiniz:

örnek 1

Taşı imleç [ Dired ](ile M-p, M-n), sonra basın dsilme olarak işaretine

example2

daha sonra xyürütmek için basın .

Bu yolu tercih ediyorum çünkü anahtarımı yeni işleve nasıl bağlamamız gerektiğini düşünmeme gerek yok ve tamponlarım daha iyi organize oluyor.


ibufferKodunuzu değerlendirdikten sonra ilk başlattığımda filtre grupları benim için görüntülenmedi . Ben vurmak zorunda kaldı / R(bağlı ibuffer-switch-to-saved-filter-groupsgrupların almak için).
— itsjeyd

(ibuffer-switch-to-saved-filter-groups "Default")Bu kod satırını ibuffer hook'a ekleyebilirsiniz, değilse, filtre gruplarının adı değiştirilmelidirDefault
— Rangi Lin

1
Evet, yaptığım şey bu. Cevabınızı okumadan önce filtre grupları hakkında hiçbir şey bilmiyordum, söylediğiniz için teşekkür ederiz;)
— itsjeyd

10

Hepsini bir noktada istediğin için çok fazla Dired tamponun var mı? IOW, sen mi istiyorsun ayrı tampon olarak onların her oluşturmak için?

Değilse, çözüm basittir: Dired'e, Dired'daRET açmak için bir dizin adına bastığınızda mevcut bir Dired arabelleğini yeniden kullanmasını söyleyin.

İşte bunu nasıl yapacağınız:

  1. Kitaplığı yükle Dired + ( dired+.el):

    (require 'dired+)
    
  2. Dired’e Dired buffer’ları yeniden kullanma

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

Bunun etkisi, RETDired'da bir dizindeki isabet (veya fareye tıkladığınızda) find-alternate-file, bu nedenle orijinal Dired arabelleği yenisiyle değiştirilir (silinir).

Dired'da C-M-R(aka C-M-S-r) kullanarak bu davranışı istediğiniz zaman değiştirebilirsiniz .


Şimdi çözüme kavuştuğum çözüm bu. İlk başta 20 tane açık Dired buffer istemedim. Bunu önerdiğiniz için (ve yarattığınız için)
— teşekkürler

Bağlantılar öldü,
— 404'e ulaştı

1
@Zelphir: Başınız için teşekkürler Şimdi iyi olmalı. (Emacs Wiki genel olarak URL’lerini değiştirdi, bu yüzden eski mesajların bağlantıları koptu.)
— Drew

8

Böyle bir şey (biraz kaydırma)?

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

5

Ayrıca şunları da kullanabilirsiniz helm-mini:

  • Run M-x helm-mini.
  • İstemi yazın: *Di(kısmi sözcük Dired, daha fazla girmenize gerek yok). Siz yazdıkça, tamponlar adım adım daralır. Şimdi sadece Diredtampon kaldı. M-aTümünü işaretlemek için tuşuna basın .
  • Basın TABeylem düğmesine basınız geçmek için Keylem seçmek için Kill buffer(s).
  • RETİşlemi gerçekleştirmek için düğmesine basın .

İşin iyi yanı helm-mininormal Emacs'ın yerini alabilmesidir C-x b, bu nedenle bir tane arabellek değiştirmek için diğeri gerçek bir arabellek yöneticisi için iki anahtar bağlama kullanmak zorunda kalmazsınız. helm-minihepsi bir arada. Dümen mini kılavuzumda daha fazlasını okuyun .

helm-miniayrıca bulanık eşleştirme tamponunu kullanabilir ve C-SPCveya ile işaretleyerek çoklu tamponların açılmasına izin verebilir M-a( M ark a ll için stand ). Ayrıca @, bir şablonun önüne ekleyerek arabellek belirli bir dize içerecek şekilde daraltabilirsiniz , örneğin, @testyalnızca "test" dizesini içeren arabelleklerin seçilmesi anlamına gelir.


1

Böyle bir şey denerdim:

(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'nın -filtergerektirdiğine inanıyorum dash.el. Muhtemelen bunu bir gereklilik olarak listelemelisiniz.
— Vamsi

1

Aslında aradığınız şey, otomatik olarak istenmeyen arabellekleri temizlemenin bir yoludur; bu durumda midnight.el, Emacs'in bir parçası olan, hangi siteye bakmalısınız ?

Ancak, genel olarak konuşmak gerekirse, ibufferFrancisco’nun önerdiği gibi, arabelleklerde toplu çalışmayı çok kolaylaştırıyor.


1

Eğer kullanırsanız Icicles , o zaman kullanabilirsiniz C-x kherhangi bir modda veya tüm tamponları - tüm dired tamponlarını öldürmek için.

Vurduktan sonra C-x k, C-x M +yalnızca belirli bir moda sahip tamponları tutmak için kullanın . TABModları görmek için tuşuna basın ve seçin dired-mode. Ardından , bu moddaki tüm tamponları C-!öldürmek için kullanın .

C-x k C-x M + dired-mode C-!
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.