Kadang-kadang daftar buffer saya memiliki 10+ windows dired, dan saya akhirnya menggunakan buffer-menuuntuk secara manual menandai dan membunuh semuanya. Apakah ada cara yang lebih cepat untuk menutup semua jendela yang terbuka?
Kadang-kadang daftar buffer saya memiliki 10+ windows dired, dan saya akhirnya menggunakan buffer-menuuntuk secara manual menandai dan membunuh semuanya. Apakah ada cara yang lebih cepat untuk menutup semua jendela yang terbuka?
Jawaban:
Anda dapat melakukan hal berikut:
M-x ibuffer
* / untuk menandai buffer dalam mode dired.
D untuk menghapusnya.
C-x C-buntuk ibuffer.
t( dired-toggle-marks) untuk menandai semua (jika tidak ada yang sebelumnya ditandai).
dired-toggle-marksadalah nama dari perintah dired . Menekan tjuga akan mengaktifkan semua tanda di ibuffer, tetapi buffer non-dired biasanya lebih banyak daripada buffer yang dired, sehingga toggling tidak sering masuk akal dalam konteks ini.
Alih-alih menambahkan fungsi lain untuk membunuh semua diredbuffer, saya sarankan Anda memanfaatkan grup filter di ibuffer, itu memungkinkan Anda untuk mengelompokkan buffer berdasarkan banyak kondisi.
Berikut adalah contoh untuk mengatur grup filter:
(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 . "\*.*\*"))
)))
Kemudian C-x C-bbuka ibufferjendela, Anda dapat melihat sesuatu seperti ini:

Pindahkan kursor ke [ Dired ](dengan M-p, M-n), lalu tekan duntuk menandai sebagai hapus

lalu tekan xuntuk menjalankan.
Saya lebih suka cara ini karena saya tidak perlu memikirkan bagaimana saya harus mengikat kunci saya ke fungsi baru, dan buffer saya lebih terorganisir.
ibuffersetelah mengevaluasi kode Anda. Saya harus menekan / R(terikat ibuffer-switch-to-saved-filter-groups) untuk mendapatkan grup.
(ibuffer-switch-to-saved-filter-groups "Default")Anda dapat menambahkan baris kode ini ke kait ibuffer, nama grup filter harus diubah jika tidakDefault
Apakah Anda memiliki banyak buffer Dired karena Anda menginginkan semuanya pada satu titik? TKI, apakah Anda ingin membuat masing-masing sebagai buffer terpisah?
Jika tidak, solusinya sederhana: beri tahu Dired untuk menggunakan kembali buffer Dired yang ada saat Anda menekan RETnama direktori untuk membukanya di Dired.
Inilah cara melakukannya:
Muat perpustakaan Dired + ( dired+.el):
(require 'dired+)
Beri tahu Dired untuk menggunakan kembali Buffer Dired:
(diredp-toggle-find-file-reuse-dir 1)
Efeknya adalah ketika Anda menekan RET(atau mengklik mouse) pada direktori di Dired, find-alternate-filedigunakan, jadi buffer Dired asli diganti (dihapus) dengan yang baru.
Anda dapat beralih perilaku ini kapan saja, menggunakan C-M-R(alias C-M-S-r) di Dired.
Sesuatu seperti ini (gulir sedikit)?
(defun kill-dired-buffers ()
(interactive)
(mapc (lambda (buffer)
(when (eq 'dired-mode (buffer-local-value 'major-mode buffer))
(kill-buffer buffer)))
(buffer-list)))
Anda juga dapat menggunakan helm-mini:
M-x helm-mini.*Di(sebagian kata untuk Dired, tidak perlu memasukkan lebih banyak). Saat Anda mengetik, buffer semakin menyempit. Sekarang, tinggal Diredbuffer yang tersisa. Tekan M-auntuk menandai semua.TABuntuk beralih ke menu tindakan dan tekan Kuntuk memilih tindakan Kill buffer(s).RETuntuk menjalankan tindakan.Hal baiknya helm-miniadalah ia dapat menggantikan Emacs normal C-x b, jadi Anda tidak perlu menggunakan dua ikatan utama, satu untuk mengganti buffer dan satu untuk buffer manager yang sebenarnya. helm-miniadalah all-in-one. Baca lebih lanjut di panduan helm-mini saya .
helm-minijuga dapat fuzzy match buffer dan memungkinkan untuk membuka beberapa buffer dengan menandai dengan C-SPCatau M-a(singkatan dari M ark a ll). Anda juga dapat mempersempit buffer berisi string tertentu dengan menambahkan @sebelum suatu pola, misalnya, @testberarti hanya memilih buffer yang berisi string "test".
Saya akan mencoba sesuatu seperti ini:
(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))))
-filtermemerlukan dash.eldari MELPA. Anda mungkin harus mencantumkannya sebagai persyaratan.
Apa yang sebenarnya Anda cari adalah cara untuk membersihkan buffer yang tidak diinginkan secara otomatis, dalam hal ini Anda harus memeriksa midnight.el, yang merupakan bagian dari Emacs.
Tetapi secara umum, ibuffermembuatnya sangat mudah untuk beroperasi pada buffer dalam jumlah besar, seperti yang disarankan Francisco.
Jika Anda menggunakan Icicles , maka Anda dapat menggunakannya C-x kuntuk membunuh semua buffer Dired - atau semua buffer dalam mode apa pun.
Setelah memukul C-x k, gunakan C-x M +untuk menjaga hanya buffer dengan mode tertentu. Tekan TABuntuk melihat mode, dan pilih dired-mode. Kemudian gunakan C-!untuk membunuh semua buffer dengan mode itu.
C-x k C-x M + dired-mode C-!