บางครั้งรายการบัฟเฟอร์ของฉันมีมากกว่า 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สวิทช์ไปที่เมนูการกระทำและกดเพื่อเลือกการกระทำKKill 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-!