Kadang-kadang daftar buffer saya memiliki 10+ windows dired, dan saya akhirnya menggunakan buffer-menu
untuk 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-menu
untuk 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-b
untuk ibuffer
.
t
( dired-toggle-marks
) untuk menandai semua (jika tidak ada yang sebelumnya ditandai).
dired-toggle-marks
adalah nama dari perintah dired . Menekan t
juga 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 dired
buffer, 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-b
buka ibuffer
jendela, Anda dapat melihat sesuatu seperti ini:
Pindahkan kursor ke [ Dired ]
(dengan M-p
, M-n
), lalu tekan d
untuk menandai sebagai hapus
lalu tekan x
untuk 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.
ibuffer
setelah 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 RET
nama 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-file
digunakan, 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 Dired
buffer yang tersisa. Tekan M-a
untuk menandai semua.TAB
untuk beralih ke menu tindakan dan tekan K
untuk memilih tindakan Kill buffer(s)
.RET
untuk menjalankan tindakan.Hal baiknya helm-mini
adalah 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-mini
adalah all-in-one. Baca lebih lanjut di panduan helm-mini saya .
helm-mini
juga dapat fuzzy match buffer dan memungkinkan untuk membuka beberapa buffer dengan menandai dengan C-SPC
atau M-a
(singkatan dari M ark a ll). Anda juga dapat mempersempit buffer berisi string tertentu dengan menambahkan @
sebelum suatu pola, misalnya, @test
berarti 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))))
-filter
memerlukan dash.el
dari 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, ibuffer
membuatnya sangat mudah untuk beroperasi pada buffer dalam jumlah besar, seperti yang disarankan Francisco.
Jika Anda menggunakan Icicles , maka Anda dapat menggunakannya C-x k
untuk 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 TAB
untuk 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-!