บางครั้งรายการบัฟเฟอร์ของฉันมีมากกว่า 10 windows และฉันใช้buffer-menu
เพื่อทำเครื่องหมายและฆ่าทั้งหมดด้วยตนเอง มีวิธีที่เร็วกว่าในการปิดหน้าต่างที่เปิดทั้งหมดหรือไม่
บางครั้งรายการบัฟเฟอร์ของฉันมีมากกว่า 10 windows และฉันใช้buffer-menu
เพื่อทำเครื่องหมายและฆ่าทั้งหมดด้วยตนเอง มีวิธีที่เร็วกว่าในการปิดหน้าต่างที่เปิดทั้งหมดหรือไม่
คำตอบ:
คุณสามารถทำสิ่งต่อไปนี้:
M-x
ibuffer
* /
เพื่อทำเครื่องหมายบัฟเฟอร์ในโหมด dired
D
เพื่อลบ
C-x C-b
ให้ibuffer
แน่นอน
t
( dired-toggle-marks
) เพื่อทำเครื่องหมายทั้งหมด (หากไม่ได้ทำเครื่องหมายไว้ก่อนหน้านี้)
dired-toggle-marks
เป็นชื่อของคำสั่งdired การกดt
จะเป็นการสลับเครื่องหมายทั้งหมดใน ibuffer แต่บัฟเฟอร์ที่ไม่ต้องใช้มักจะมีจำนวนมากกว่าบัฟเฟอร์ที่ dired ดังนั้นการสลับจะไม่สมเหตุสมผลในบริบทนี้
แทนที่จะเพิ่มฟังก์ชั่นอื่นเพื่อฆ่าdired
บัฟเฟอร์ทั้งหมดฉันขอแนะนำให้คุณใช้ประโยชน์จากกลุ่มตัวกรองในibuffer
ซึ่งช่วยให้คุณสามารถจัดกลุ่มบัฟเฟอร์ตามเงื่อนไขหลายประการ
นี่คือตัวอย่างการตั้งค่ากลุ่มตัวกรอง:
(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 . "\*.*\*"))
)))
จากนั้นC-x C-b
เปิดibuffer
หน้าต่างคุณจะเห็นสิ่งนี้:
เลื่อนเคอร์เซอร์ไปที่[ Dired ]
(ด้วยM-p
, M-n
) จากนั้นกดd
เพื่อทำเครื่องหมายว่าลบ
จากนั้นกดx
เพื่อดำเนินการ
ฉันชอบวิธีนี้เพราะฉันไม่จำเป็นต้องคิดว่าฉันควรผูกกุญแจของฉันกับฟังก์ชั่นใหม่อย่างไรและบัฟเฟอร์ของฉันก็จัดได้ดีขึ้น
ibuffer
หลังจากประเมินรหัสของคุณ ฉันต้องกดปุ่ม/ R
(ผูกติดกับibuffer-switch-to-saved-filter-groups
) เพื่อให้ได้กลุ่ม
(ibuffer-switch-to-saved-filter-groups "Default")
คุณสามารถเพิ่มบรรทัดของรหัสนี้ลงในตะขอ ibuffer ชื่อกลุ่มตัวกรองควรมีการเปลี่ยนแปลงหากไม่ได้เป็นDefault
คุณมีบัฟเฟอร์ Dired มากมายเพราะคุณต้องการให้พวกเขาทั้งหมดในจุดเดียว? IOW คุณต้องการสร้างแต่ละรายการเป็นบัฟเฟอร์แยกกันหรือไม่
หากไม่เป็นเช่นนั้นวิธีแก้ปัญหาคือง่าย: ให้บอก Dired เพื่อใช้บัฟเฟอร์ Dired ที่มีอยู่แล้วซ้ำอีกครั้งเมื่อคุณกดRET
ชื่อไดเรกทอรีเพื่อเปิดใน Dired
นี่คือวิธีการทำ:
โหลดไลบรารีDired + ( dired+.el
):
(require 'dired+)
บอก Dired เพื่อนำบัฟเฟอร์ Dired ไปใช้ซ้ำ:
(diredp-toggle-find-file-reuse-dir 1)
ผลกระทบคือเมื่อคุณกดRET
(หรือคลิกเมาส์) ในไดเรกทอรีใน Dired find-alternate-file
จะถูกใช้ดังนั้นบัฟเฟอร์ Dired ดั้งเดิมจะถูกแทนที่ (ลบ) โดยอันใหม่
คุณสามารถสลับพฤติกรรมนี้ได้ทุกเมื่อโดยใช้C-M-R
(aka C-M-S-r
) ใน Dired
บางอย่างเช่นนี้ (เลื่อนไปเล็กน้อย)?
(defun kill-dired-buffers ()
(interactive)
(mapc (lambda (buffer)
(when (eq 'dired-mode (buffer-local-value 'major-mode buffer))
(kill-buffer buffer)))
(buffer-list)))
คุณยังสามารถใช้helm-mini
:
M-x helm-mini
วิ่ง*Di
(คำบางคำสำหรับDired
, ไม่จำเป็นต้องใส่เพิ่มเติม) ขณะที่คุณพิมพ์บัฟเฟอร์จะถูก จำกัด แบบค่อยเป็นค่อยไป ตอนนี้เหลือเพียงDired
บัฟเฟอร์เท่านั้น กดM-a
เพื่อทำเครื่องหมายทั้งหมดTAB
สวิทช์ไปที่เมนูการกระทำและกดเพื่อเลือกการกระทำK
Kill buffer(s)
RET
เพื่อดำเนินการแอ็คชันข้อดีก็helm-mini
คือมันสามารถแทนที่ Emacs ปกติได้C-x b
ดังนั้นคุณไม่ต้องใช้การเชื่อมโยงคีย์สองครั้งหนึ่งครั้งสำหรับการสลับบัฟเฟอร์และอีกอันสำหรับผู้จัดการบัฟเฟอร์จริง helm-mini
คือทั้งหมดในหนึ่งเดียว อ่านเพิ่มเติมในหางเสือขนาดเล็กคำแนะนำของฉัน
helm-mini
ยังสามารถจับคู่บัฟเฟอร์ฟัซซี่และอนุญาตให้เปิดหลายบัฟเฟอร์ด้วยการทำเครื่องหมายด้วยC-SPC
หรือM-a
(ยืนสำหรับM ark a ll) นอกจากนี้คุณยังสามารถ จำกัด บัฟเฟอร์ให้แคบลงได้โดยการต่อท้าย@
รูปแบบตัวอย่างเช่น@test
หมายถึงเลือกเฉพาะบัฟเฟอร์เท่านั้นที่มีสตริง "test"
ฉันจะลองสิ่งนี้:
(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
ต้องการdash.el
จาก MELPA คุณควรระบุว่าเป็นข้อกำหนด
สิ่งที่คุณอาจกำลังมองหาคือวิธีทำความสะอาดบัฟเฟอร์ที่ไม่ต้องการโดยอัตโนมัติในกรณีนี้คุณควรตรวจสอบmidnight.el
ซึ่งเป็นส่วนหนึ่งของ Emacs
แต่โดยทั่วไปการพูดibuffer
ทำให้การใช้งานบัฟเฟอร์เป็นจำนวนมากเป็นเรื่องง่ายตามที่ฟรานซิสโกแนะนำ
หากคุณใช้Iciclesคุณสามารถใช้C-x k
เพื่อฆ่าบัฟเฟอร์ Dired ทั้งหมดหรือบัฟเฟอร์ทั้งหมดในโหมดที่กำหนด
หลังจากกดปุ่มC-x k
ใช้C-x M +
เพื่อเก็บบัฟเฟอร์ด้วยโหมดที่แน่นอนเท่านั้น กดเพื่อดูรูปแบบและเลือกTAB
dired-mode
จากนั้นใช้C-!
เพื่อฆ่าทั้งหมดของบัฟเฟอร์ด้วยโหมดที่
C-x k C-x M + dired-mode C-!