Emacs'ta mevcut ara bellek dışında tümünü nasıl kapatırım? Modern web tarayıcılarındaki "Diğer sekmeleri kapat" özelliğine benzer mi?
Emacs'ta mevcut ara bellek dışında tümünü nasıl kapatırım? Modern web tarayıcılarındaki "Diğer sekmeleri kapat" özelliğine benzer mi?
Yanıtlar:
Daha manuel bir yaklaşım için, tüm arabellekleri ile listeleyebilir, listedeki arabellekleri ile C-x C-bsilinmek üzere işaretleyebilir dve sonra xbunları kaldırmak için kullanabilirsiniz .
Ben de daha gelişmiş ibuffer ile liste tampon değiştirilmesini tavsiye: (global-set-key (kbd "C-x C-b") 'ibuffer)
. Yukarıdakiler ibuffer ile çalışacaktır, ancak bunu da yapabilirsiniz:
m(tutmak istediğiniz tamponu
tişaretleyin)
D( geçiş işaretleri) (tüm işaretli tamponları kapatın)
Ayrıca, bu manuel yaklaşımı daha da kolaylaştıracak olan Emacs Wiki'den bu pasajı kullanıyorum:
;; Ensure ibuffer opens with point at the current buffer's entry.
(defadvice ibuffer
(around ibuffer-point-to-most-recent) ()
"Open ibuffer with cursor pointed to most recent buffer name."
(let ((recent-buffer-name (buffer-name)))
ad-do-it
(ibuffer-jump-to-buffer recent-buffer-name)))
(ad-activate 'ibuffer)
q
? C-h m
Diğer modlarda olduğu gibi tuş bağlamalarını öğrenmek için kullanın .
Gönderen EmacsWiki: Tamponlar Öldürme :
(defun kill-other-buffers ()
"Kill all other buffers."
(interactive)
(mapc 'kill-buffer
(delq (current-buffer)
(remove-if-not 'buffer-file-name (buffer-list)))))
Düzenleme : Gilles'ten gelen geri bildirimlerle güncellendi
buffer-file-name
ve bu nedenle remove-if-not
yukarıdaki örnekte yapılan çağrı, yönlendirilmiş arabellekleri (ayrıca çalışma arabelleği, terim arabellekleri, yardım arabellekleri vb., bir dosyayı ziyaret etmeyen her şeyi) korur. Hem dosya arabelleklerini hem de yönlendirilmiş arabellekleri kapatacak kolay bir test düşünemiyorum, temelde yönlendirilmiş tamponlar için farklı bir testle birlikte ikinci bir mapc çağrısına ihtiyacınız olacak.
(defun kill-other-buffers () "Kill all other buffers." (interactive) (mapc 'kill-buffer (delq (current-buffer) (remove-if-not '(lambda (x) (or (buffer-file-name x) (eq 'dired-mode (buffer-local-value 'major-mode x)))) (buffer-list)))))
cl-remove-if-not
ile remove-if-not
işler ama bu öldürmez *helm..
tamponlarını
Bunu doğrudan emacs'ta yapmanın bir yolu yok.
Bunu yapmak için bir fonksiyon yazabilirsiniz. Aşağıdakiler tüm arabellekleri kapatır:
(tüm arabellekleri kapat () (etkileşimli) (mapc 'öldürme tamponu (arabellek listesi)))
(delete (current-buffer) (buffer-list))
size eşleştirebileceğiniz kill-buffer
ve mevcut arabelleği öldürmekten kaçınabileceğiniz bir arabellek listesi vermelidir .
Yerleşik bir komut var m- x kill-some-buffers
(24.3.50 kullanıyorum) Sonraki adımda gui'mde (bir terminalde denenmedi, ancak benzer olduğundan emin olun) daha sonra hangi tamponların kapatılacağını onaylayabilirsiniz.
(defun only-current-buffer ()
(interactive)
(let ((tobe-killed (cdr (buffer-list (current-buffer)))))
(while tobe-killed
(kill-buffer (car tobe-killed))
(setq tobe-killed (cdr tobe-killed)))))
Beklediğiniz gibi çalışıyor.
@ Starkey'in cevabını okuduktan sonra, bunun daha iyi olacağını düşünüyorum:
(defun only-current-buffer ()
(interactive)
(mapc 'kill-buffer (cdr (buffer-list (current-buffer)))))
(arabellek listesi (geçerli-arabellek)), mevcut arabellek listenin başında olacak şekilde tüm mevcut arabellekleri içeren bir liste döndürür.
Bu, StackOverflow'daki ilk cevabım. Umarım yardımcı olur :)
buffer-list
yılda ancak değiştirilen (buffer-list (current-buffer))
işe yukarıdaki cevabı olacak anlaşılacağı gibi DEĞİL çalışır. Do C-h f buffer-list RET
cari spec.
Bu çözümü en basit olanı buldum. Bu, geçerli olan dışındaki tüm arabelleği siler. Bu kodu .emacs
dosyanıza eklemelisiniz
(defun kill-other-buffers ()
"Kill all other buffers."
(interactive)
(mapc 'kill-buffer (delq (current-buffer) (buffer-list))))
Tabii ki, o zaman onu birlikte kullanırsınız M-x kill-other-buffers
RET veya aşağıdaki kodu .emacs
dosyaya da yapıştırırsınız ve ardındanC-xC-b
(global-set-key (kbd "C-x C-b") 'kill-other-buffers)
Ben ettik kullanım püf noktası-öldürme-diğer-tamponlar birkaç ay.
Ama diredilmiş tamponların da silinmesini istiyorum. @ Euge's ve @ wenjun.yan'ın cevapları bunu çözüyor. Ancak özel arabellekleri silecektir (örneğin * git-kimlik bilgisi-önbellek - daemon *, * çizik *, dümen işlemi vb.). Ben de bu (güncel) çözümü buldum.
(defun aza-kill-other-buffers ()
"Kill all buffers but current buffer and special buffers"
(interactive)
(dolist (buffer (delq (current-buffer) (buffer-list)))
(let ((name (buffer-name buffer)))
(when (and name (not (string-equal name ""))
(/= (aref name 0) ?\s)
(string-match "^[^\*]" name))
(funcall 'kill-buffer buffer)))))
Dan esinlenerek öldürme eşleştirme-tamponları . İsterseniz, condition
dışlamak için diğer arabellek adı üzerine daha fazlasını ekleyebilirsiniz .
Umarım yardımcı olur :)
Bunu da beğenebilirsiniz - şu anki * Mesajlar * ve * çizik * hariç tüm arabellekleri öldürün (bunlara sahip olmak kullanışlı, onlara "araç seti" diyorum), gereksiz pencereleri de kapatın, hangi pencerede hangi pencerede olduğunuzu yaşayın tampon.
(defun my/kill-all-buffers-except-toolbox ()
"Kill all buffers except current one and toolkit (*Messages*, *scratch*). Close other windows."
(interactive)
(mapc 'kill-buffer (remove-if
(lambda (x)
(or
(string-equal (buffer-name) (buffer-name x))
(string-equal "*Messages*" (buffer-name x))
(string-equal "*scratch*" (buffer-name x))))
(buffer-list)))
(delete-other-windows))
(string-equal (buffer-name) (buffer-name x))
aynı şey (eq x (current-buffer))
, sadece daha az verimli. Kalan or
basitleştirilebilir(member (buffer-name x) '("*Messages*" "*scratch*"))
Senin istediğin bu:
C-x 1
kaynak: https://blasphemousbits.wordpress.com/2007/05/04/learning-emacs-part-4-buffers-windows-and-frames/
ibuffer
? @phils