ผมใช้ido-mode
แต่สิ่งหนึ่งที่ฉันเกลียดเกี่ยวกับเรื่องนี้คือว่าหลังจากที่C-x C-f
ฉันไม่สามารถใช้คีย์เพื่อวงจรผ่านไฟล์ที่เพิ่งเปิดในขณะที่มันเคยเป็นเช่นกับup/down
iswitchb
ฉันido
จะตั้งให้ทำงานแบบนี้ได้อย่างไร
ผมใช้ido-mode
แต่สิ่งหนึ่งที่ฉันเกลียดเกี่ยวกับเรื่องนี้คือว่าหลังจากที่C-x C-f
ฉันไม่สามารถใช้คีย์เพื่อวงจรผ่านไฟล์ที่เพิ่งเปิดในขณะที่มันเคยเป็นเช่นกับup/down
iswitchb
ฉันido
จะตั้งให้ทำงานแบบนี้ได้อย่างไร
คำตอบ:
ดูที่ตัวเลือกการปรับแต่งสำหรับido-mode
( M-x customize-group
RET ido
RET) ฉันไม่เห็นตัวเลือกใด ๆ สำหรับการเปิดใช้งานพฤติกรรมการปั่นจักรยานที่คุณอธิบาย
อย่างไรก็ตามคุณสามารถเพิ่มสิ่งต่อไปนี้ในไฟล์ init ของคุณ:
(require 'recentf)
(defun ido-recentf-open ()
"Use `ido-completing-read' to find a recent file."
(interactive)
(if (find-file (ido-completing-read "Find recent file: " recentf-list))
(message "Opening file...")
(message "Aborting")))
(global-set-key (kbd "C-x C-r") 'ido-recentf-open)
ด้วยสิ่งนี้คุณสามารถกดC-x C-rเพื่อให้เสร็จสมบูรณ์ Ido สำหรับการเลือกไฟล์ที่เพิ่งเปิด
โดยค่าเริ่มต้นไฟล์ล่าสุด 20 ไฟล์จะถูกเก็บไว้ในประวัติ ฉันขอแนะนำให้คุณเหวี่ยงสิ่งนั้นเช่น 150 โดยการตั้งค่าrecentf-max-saved-items
:
(setq recentf-max-saved-items 150)
ผมไม่เห็นว่ามันกล่าวถึงในหลายสถานที่ แต่สั่นสะท้านบัฟเฟอร์เสมือนทำให้มันง่ายสุดในการเข้าถึงไฟล์ล่าสุด เปิดใช้งานเช่น:
(setq ido-use-virtual-buffers t)
พฤติกรรมที่คุณได้รับคือ:
หากไม่ใช่ -
nil
อ้างถึงบัฟเฟอร์ในอดีต ("เสมือน") รวมถึงบัฟเฟอร์ที่มีอยู่เป็นหลักก็ทำงานดังนี้:
midnight.el
สมมติว่าคุณกำลังเยี่ยมชมไฟล์และกันชนได้รับการทำความสะอาดขึ้นโดย หลังจากนั้นคุณต้องการเปลี่ยนไปใช้บัฟเฟอร์นั้น แต่พบว่าไม่มีการเปิดอีกต่อไป เมื่อเปิดใช้งานบัฟเฟอร์เสมือนชื่อบัฟเฟอร์จะยังคงอยู่ในรายการบัฟเฟอร์ (โดยใช้ido-virtual
ใบหน้าและท้ายเสมอ) และหากคุณเลือกมันจะเปิดไฟล์สำรองอีกครั้ง วิธีนี้ช่วยให้คุณคิดน้อยลงว่าไฟล์ที่เพิ่งเปิดยังคงเปิดอยู่หรือไม่ เวลาส่วนใหญ่ที่คุณสามารถออกจาก Emacs เริ่มต้นใหม่แล้วสลับไปยังบัฟเฟอร์ไฟล์ที่เปิดไว้ก่อนหน้านี้ราวกับว่ามันยังคงอยู่
C-x C-r
ฉันไม่สามารถเปิดไฟล์ใหม่ได้ ฉันยังประหลาดใจที่ไม่สามารถกำหนดค่าได้ด้วยวิธีง่าย ๆ ประวัติความเป็นมาC-x C-f
เป็นเช่นคุณลักษณะที่เห็นได้ชัดว่าผมไม่เข้าใจว่าทำไมไม่ได้ดำเนินการในido
เลย ตัวอย่างเช่นM-x up/down
วนรอบคำสั่งล่าสุด, M-% up/down
วนรอบผ่านการแทนที่คิวรีล่าสุด, แม้อยู่นอก emacs - เชลล์ทั้งหมดในฐานะ bash หรือ zsh ใช้ขึ้น / ลงเพื่อเรียกคืนคำสั่งก่อนหน้านี้ สำหรับฉันC-x C-f up/down
ควรวนไฟล์ที่เพิ่งเปิดใหม่ หยุดเต็ม
ido-use-virtual-buffers
- เป็นสุดยอดฟีเจอร์ที่ควรเปิดโดย IMO ที่เป็นค่าเริ่มต้น
แม้ว่าการเชื่อมโยงจะมีวิวัฒนาการตลอดเวลา ณ วันนี้เมื่อคุณเรียกใช้ido-find-file
หรือido-find-file-read-only
คุณสามารถใช้การเชื่อมโยงต่อไปนี้ในการกำหนดค่าเริ่มต้น:
ido-prev-work-file
ido-next-work-file
นอกเหนือจากสิ่งเหล่านี้ไม่ได้เป็นที่พอใจตามหลักสรีรศาสตร์เช่นเดียวกับM-pและM-nฉันเคยชินกับการลองใช้idoพวกเขายังช้าและการพูดคุยกันของมินิฟเฟอร์เกอร์มิวนิกก็ทำให้เสียสมาธิและสับสน idoทำอะไรมากกว่าเพียงแค่แสดงชื่อไฟล์ที่เพิ่งเปิด มันรายงานว่าเป็น "ค้นหา" ชื่อไฟล์ "... " อาจไม่เต็มใจที่จะเสนอชื่อไฟล์ที่ไม่มีอยู่อีกต่อไป
"การค้นหา" ido-make-merged-file-list
ข้อความมาจากฟังก์ชั่น อ่านแหล่งที่มาฉันไม่เห็นวิธีใด ๆ ที่จะปิดการใช้งานฟังก์ชั่นที่เวทมนตร์กำลังทำอยู่
คุณอาจพิจารณาการผูกido-prev-work-file
และido-next-work-file
จับคู่กับสิ่งที่เป็นธรรมชาติมากกว่าC-M-pและC-M-nหรือสลับการผูกM-p( ido-prev-work-directory
) และM-n( ido-next-work-directory
) ปัจจุบันสำหรับสิ่งเหล่านี้
นี่คือรหัส Emacs Lisp เพื่อเรียกคืนM-pและวนM-nไปตามไฟล์ล่าสุดโดยย้ายการเชื่อมโยงไดเร็กทอรีที่เป็นค่าดีฟอลต์ไปที่C-M-pและC-M-nตามลำดับ:
(add-hook 'ido-setup-hook
(lambda ()
(let ((kmap ido-file-dir-completion-map))
(let ((key '(meta ?n)))
(define-key kmap (vector (cons 'control key))
(lookup-key kmap (vector key)))
(define-key kmap (vector key) 'ido-next-work-file))
(let ((key '(meta ?p)))
(define-key kmap (vector (cons 'control key))
(lookup-key kmap (vector key)))
(define-key kmap (vector key) 'ido-prev-work-file)))))
สิ่งที่ฉันเคยใช้ในกรณีนี้คือการกลับไปสู่พฤติกรรม minibuffer ปกติโดยพิมพ์ Cf ใน idomode จากนั้นคุณจะมีปุ่มเรียกดูประวัติตามปกติ หากคุณรู้ล่วงหน้าอาจเป็นได้อย่างรวดเร็ว: Cxff :-)
คำตอบที่ได้รับจาก @itsjeyd ค่อนข้างสมบูรณ์ ผมขอแนะนำฟังก์ชั่น:
(defun ido-choose-from-recentf ()
"Use ido to select a recently visited file from the `recentf-list'"
(interactive)
(find-file (ido-completing-read "Open file: " recentf-list nil t)))
;; bind it to "C-c f"
(global-set-key (kbd "C-c f") 'ido-choose-from-recentf)
ความอนุเคราะห์จากWikEmacs
ฉันพบว่าhelm-for-files
ทำงานได้ดีกว่าคำตอบใด ๆ ข้างต้นเพื่อวัตถุประสงค์ในการเติมชื่อไฟล์ให้อัตโนมัติและมีอินเทอร์เฟซการค้นหาที่ดี นอกจากนี้คุณสามารถกำหนดค่าให้รวมรายการค้นหาที่คุณต้องการ