ฉันจะบอก Ido ให้พ้นทางได้อย่างไรเมื่อฉันสามารถวางชื่อไฟล์ได้แล้ว?


14

ฉันพยายามทำให้ตัวเองใช้โหมด Ido บางครั้งมันก็ดี แต่บางครั้งมันก็โง่มาก นี่คือความผิดหวังที่ยิ่งใหญ่ที่สุดของฉัน

ฉันอ่านบันทึกที่มีชื่อเต็มจากนั้นคัดลอกชื่อหนึ่งลองเปิดไฟล์นั้น

วิธีการทำเช่นนี้โดยไม่มี Ido: C-aC-yC-kRET

ด้วย Ido มีสองปัญหาที่สำคัญ:

  1. หากฉันมีชื่อไฟล์ทั้งหมดไม่มีวิธีที่จะป้อนข้อมูลนั้น (ฉันต้องลบเครื่องหมายทับแรกไม่เช่นนั้นการกดอื่น ๆ//จะไม่ช่วยได้

  2. ฉันไม่สามารถแก้ไขส่วนตรงกลางของชื่อไฟล์ที่เหลือโดยไม่แก้ไข

หรือฉัน


2
คุณสามารถปล่อยกลับไปที่หุ้นfind-fileด้วยC-x C-fและวางตามปกติ แต่นั่นคือการกดแป้นมากกว่า หรือคุณสามารถใช้ Helm ได้หากคุณต้องการฟีเจอร์ที่หลากหลายfind-fileและยังคงรองรับกรณีการใช้งานของคุณ
Tu Do

1
โอ้ขอบคุณ nah ผมไม่ทำเช่นนี้จึงมักที่ฉันบ่นเกี่ยวกับการกดแป้นพิมพ์พิเศษสอง นี่จะเป็นการตอบสนองความต้องการของฉันในตอนนี้ ขอบคุณ!
wvxvw

@Tu Do คุณควรวางคำตอบนั้นไว้ด้านล่าง ฉันพบว่าทางC-x C-fเลือกมีประโยชน์หลายครั้งแล้ว!
Kaushal Modi

คำตอบ:


17

ในขณะที่idoคำสั่งการใช้งาน ( ido-find-fileในกรณีนี้) คุณสามารถวางกลับไปที่ไม่ใช่ idoรุ่นของคำสั่งเดียวกัน ( find-fileในกรณีนี้) โดยใช้ ido-default ผูกพันสำหรับC-x C-fido-fallback-command

เพื่อตอบคำถามคุณ

  • ครั้งแรกที่โทรประสงค์C-x C-fido-find-file
  • อย่างที่สองก็จะถอยกลับไปC-x C-ffind-file
  • จากนั้นคุณสามารถทำได้C-a C-y C-k RETตามปกติโดยการดึงไฟล์ที่คัดลอกไปไว้ใน minibuffer

หมายเหตุ: ในido, C-x C-f C-x C-fจะทำสิ่งเดียวคือถอยกลับไปC-x C-f C-ffind-file

เกี่ยวกับC-fในido ในido-mode, ถูกผูกไว้กับC-f ido-magic-forward-charจากido.el,

(defun ido-magic-forward-char (หาเรื่อง)
  "ก้าวไปข้างหน้าในการป้อนข้อมูลของผู้ใช้หรือเล่นการกระทำเวทมนต์
หากไม่มีการป้อนข้อมูลของผู้ใช้หรือในตอนท้ายของการป้อนข้อมูลให้ทำการกระทำมายากล:
Cx Cb ... Cf เปลี่ยนเป็น `ido-find-file '
Cx Cf ... CF สำรองทางเลือกที่ไม่ใช่ Ido `find-file '
Cx Cd ... CF สำรองทางเลือกที่ไม่ใช่ Ido โดยย่อ `dired '
Cx d ... CF สำรองทางเลือกที่ไม่ใช่ Ido `dired '"

2
สำหรับฉันมันเป็นเพียงC-fที่จะได้รับกลับไปไม่ได้find-file C-x C-fฉันไม่เห็นว่าฉันปรับแต่งมันแล้ว (และฉันก็เหมือนกับคนอื่น ๆ ที่นี่ต้องพึ่งพาทางเลือกมาก ๆidoเป็นปัญหาเกือบเท่าที่มันคุ้มค่าหลังจากใช้งานมาระยะหนึ่งแล้ว)
harpo

1
@harpo ฉันเพิ่งปรับปรุงคำตอบข้างต้นอธิบายว่าทำไมC-x C-f C-fยังใช้งานได้
Kaushal Modi

ขอบคุณ @kaushalmodi สำหรับการทำงานส่วนใหญ่ คำตอบของฉันง่าย ๆ เริ่มเหมือนความคิดเห็น มันควรเป็นคำตอบของเขา :) แค่บันทึกเพื่อความน่าเชื่อถือ
Tu Do

สิ่งนี้ช่วยให้สติของฉันดีขึ้นเนื่องจาก ido ไม่ได้เล่นกับคนจรจัดอย่างแน่นอนเมื่อใช้เส้นทางที่สมบูรณ์ ขอขอบคุณ.
Jérémie

6

เนื่องจากคุณกำลังติดต่อกับชื่อพา ธ แบบเต็มวิธีอื่นอาจใช้ได้:

  • ใช้M-x ffap( find-file-at-point): มันจะอ่านชื่อพา ธ โดยอัตโนมัติและเปิดไฟล์
  • เปิดใช้งานM-x compilation-shell-minor-modeซึ่งจะเปลี่ยนแบบอักษรของเส้นทางและทำให้ "คลิกได้" (ด้วยปากหรือRET) คลิกที่มันจะนำคุณไปยังไฟล์นั้นและบรรทัดที่เฉพาะเจาะจงและคุณสามารถใช้next-errorและprevious-errorเพื่อนำทาง ฉันมักจะใช้มันเหมือนในเปลือกโหมด

5

เนื่องจากมีมากกว่าหนึ่งวิธีในการทำอยู่เสมอนี่คือความแตกต่างของแนวคิดของ @ abo-abo ที่ทำให้การใช้งาน ido เสร็จสมบูรณ์มากกว่าที่จะกลับไปใช้คำสั่ง find ปกติ

(defun ido-yank ()
  (interactive)
  (let ((path (current-kill 0)))
    (if (file-exists-p path)
        (progn
          (let ((dir (file-name-directory path)))
            (if dir (ido-set-current-directory dir)))
          (setq ido-exit 'refresh)
          (setq ido-text-init (if (file-directory-p path) nil (file-name-nondirectory path)))
          (setq ido-rotate-temp t)
          (exit-minibuffer))
      (yank))))

(define-key ido-file-dir-completion-map (kbd "C-y") 'ido-yank)

ด้วยการรวมนี้:

  • หากการทำลายปัจจุบันเป็นเส้นทางไดเรกทอรีที่ถูกต้องคุณสามารถเริ่มต้นido-find-fileกดC-yเพื่อข้ามไปยังไดเรกทอรี yanked จากนั้นใช้ ido complete เพื่อเลือกไฟล์ต่อไป

  • หาก kill ปัจจุบันเป็นพา ธ ไฟล์ที่ถูกต้องคุณสามารถเริ่มต้นido-find-fileกดC-yเพื่อข้ามไปยังไดเรกทอรี yanked และเสนอชื่อไฟล์ yanked เป็นความสมบูรณ์และกด RET เพื่อเปิดไฟล์นั้น

  • หากการฆ่าปัจจุบันเป็นอย่างอื่นก็จะได้รับการดึงตามปกติ


อาจไม่ดีกว่าที่จะletผูกido-...ตัวแปรต่าง ๆมากกว่าsetqพวกเขา? ตอนนี้ดูเหมือนว่าคุณกำลังตั้งค่าอย่างถาวรแทนที่จะทำเพื่อชีวิตของฟังก์ชัน
ด่าน

@Dan ฉันกำลังติดตามรูปแบบของคำสั่ง ido เช่นido-next-work-directoryนั้น ฉันคิดว่าตัวแปรได้รับการตั้งค่าเพื่อให้พวกเขามีชีวิตรอดผ่านการเรียกใช้ exit-minibuffer และการรีเฟรชที่ตามมา แต่ฉันก็ยังไม่ได้ทำแบบนี้เลย!
ลูกัส

ใช่ฉันสงสัยว่าพวกเขาจะได้รับการฟื้นฟูในภายหลัง แค่อยากจะใส่หัวขึ้น
ด่าน

4

อาจจะเป็นเช่นนี้:

(define-key ido-file-dir-completion-map (kbd "C-y") 'ido-yank)
(defun ido-yank ()
  (interactive)
  (if (file-exists-p (current-kill 0))
      (ido-fallback-command)
    (yank)))

หากการทำลายปัจจุบันเป็นไฟล์ที่มีอยู่การทำC-y C-y อาจจะให้สิ่งที่คุณต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.