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.