ฉันจะทำให้การกด <RET> ใน helm-find-files เปิดไดเรกทอรีได้อย่างไร


25

เมื่อฉันเรียกใช้#'helm-find-filesและย้ายจุดไปยังไดเรกทอรีกด<ret>ผลลัพธ์ในการเปิดไดเรกทอรีนั้นในโหมด dire หนึ่งจะต้องกดC-jเพื่อเข้าสู่ไดเรกทอรีนั้นใน Helm

ฉันต้องการที่จะ<RET>ทำเหมือนC-jที่นี่ แต่ไม่จำเป็นต้องทุกที่อื่น ฉันจะตรวจสอบและC-jถูกผูกไว้#'helm-maybe-exit-minibufferในขณะที่ถูกผูกไว้กับ<RET> #'helm-execute-persistent-actionมีผลผูกพัน<RET>ไป#'helm-maybe-exit-minibufferงานสำหรับกรณีนี้ แต่แบ่งกรณีอื่น ๆ : describe-functionตัวอย่างเช่นการเติมข้อความอัตโนมัติหางเสือใน

ดังนั้นเมื่อใช้ Helm เพื่อค้นหาไฟล์ฉันจะกด<RET>เปิดไดเรกทอรีนั้นใน Helm ได้อย่างไร


1
@TuDo ฉันคุ้นเคยกับido-modeการกด<RET>เลือกโฟลเดอร์เพื่อค้นหาไฟล์ที่อยู่ภายใน ฉันคิดว่านี่เป็นพฤติกรรมที่สอดคล้องกันมากที่สุดเมื่อพยายามค้นหาไฟล์ - สิ่งที่คุณต้องการทำเมื่อคุณพบว่าไฟล์เปิดอยู่ สิ่งที่คุณต้องการทำเมื่อพบโฟลเดอร์เข้าไปข้างในเพื่อหาไฟล์
zck

2
Helm มีพฤติกรรมที่ตรงกันข้าม - เมื่ออยู่ในไฟล์<RET>ทั้งการเติมข้อความอัตโนมัติและเลือก คุณไม่ต้องกดปุ่ม<tab>จนจบชื่อไฟล์ แต่เรากำลังถกเถียงเรื่องค่ากำหนด - ฉันแค่ต้องการ "ป้อน" เพื่อหมายถึง "เลือกสิ่งที่ตรงประเด็น" และสำหรับฉันนั่นไม่ได้หมายความว่า ถ้าฉันอยู่ในเปลือกฉันคาดหวังพฤติกรรมที่แตกต่าง
zck

4
ฉันอยู่กับ zck ที่นี่หน่วยความจำของกล้ามเนื้ออยู่ที่นั่นหลังจากใช้ ido มานานหลายปี (และการกระทำที่คาดหวังมากที่สุดที่มีการเจาะลึกลงไป) และนี่คือจุดปวดหลักในขณะที่คุ้นเคยกับการถือหางเสือ ฉันได้ตั้งแต่เปลี่ยนไปใช้ปุ่มลูกศรขวาเพื่อเจาะลึก (ใช้เวลาประมาณหนึ่งสัปดาห์ที่จะได้ใช้)
Ustun

1
ฉันยังมี zck การนำทางใน ido นั้นง่ายกว่าพฤติกรรมมาตรฐานของหางเสือ โดยเฉพาะอย่างยิ่งปุ่ม Backspace มันจะลบอักขระตัวหนึ่งออกจากการค้นหาหรือข้ามกลับไปที่โฟลเดอร์หากไม่มีสิ่งใดแทรกอยู่ มีวิธีการผูกสายใหม่เพื่อรับฟังก์ชั่นนี้ทั้งหมดหรือไม่?
Fu86

1
ตั้งแต่Helm 2.6.1พฤติกรรมที่คุณต้องการเป็นค่าเริ่มต้น
amitp

คำตอบ:


19

ผมเคยใช้ยังจำนวนมากและการฝึกอบรมหน่วยความจำของกล้ามเนื้อของฉัน :) ผมคิดว่ารูปแบบที่ใช้งานง่ายกว่าวิธีการ ฉันค้นหาสิ่งต่างๆ (พิมพ์อักขระบางตัว) และยอมรับการค้นหา (กด) เช่นเดียวกับแถบค้นหา / ที่อยู่ของเว็บเบราว์เซอร์ของฉัน หากการเลือกเป็นไดเรกทอรีฉันจะเข้าสู่ไดเรกทอรีนี้และเริ่มค้นหาอีกครั้งในไดเรกทอรีนี้ นี่เป็นเรื่องธรรมดาสำหรับฉันดังนั้นฉันจึงได้เขียนคำแนะนำเล็กน้อยเพื่อบังคับช่างนี้ido-modeidohelmREThelm-execute-persistent-action

(require 'helm)
(defun fu/helm-find-files-navigate-forward (orig-fun &rest args)
  (if (and (equal "Find Files" (assoc-default 'name (helm-get-current-source)))
           (equal args nil)
           (stringp (helm-get-selection))
           (not (file-directory-p (helm-get-selection))))
      (helm-maybe-exit-minibuffer)
    (apply orig-fun args)))
(advice-add 'helm-execute-persistent-action :around #'fu/helm-find-files-navigate-forward)
(define-key helm-find-files-map (kbd "<return>") 'helm-execute-persistent-action)

ฉันยังเพิ่มประสิทธิภาพที่backspaceสำคัญเล็กน้อย ถ้าฉันพิมพ์บางอย่างและต้องการทำการแก้ไขฉันจะกดแบ็คสเปซ ตัวเลือกนี้จะลบหนึ่งตัว ถ้าฉันอยู่ที่จุดเริ่มต้นของไดเรกทอรีและกด backspace อีกครั้งฉันจะเลื่อนขึ้นหนึ่งระดับ นี่จะช่วยเพิ่มความเร็วในการนำทางอย่างมาก!

(defun fu/helm-find-files-navigate-back (orig-fun &rest args)
  (if (= (length helm-pattern) (length (helm-find-files-initial-input)))
      (helm-find-files-up-one-level 1)
    (apply orig-fun args)))
(advice-add 'helm-ff-delete-char-backward :around #'fu/helm-find-files-navigate-back)

หากต้องการลบสิ่งที่ไร้ประโยชน์ออก.และ..ในตอนเริ่มต้นคุณสามารถเพิ่มลงในhelm-boring-file-regexp-listตัวแปรการกำหนดค่าได้


1
วิธี Helm สอดคล้องกับหุ้นfind-fileแม้ว่า และ.และ..ก็ไม่ไร้ประโยชน์จริงๆเมื่อคุณ suddent ต้องการเปิด Dired ในไดเรกทอรีปัจจุบันหรือไดเรกทอรี และฉันพบว่าจะเร็วกว่าการกดC-l backspace
Tu Do

ฉันวงกลับไปปรับแต่งพฤติกรรมนี้นิด ๆ หน่อย ๆ - จะมีเหตุผลที่คุณใช้คำแนะนำที่นี่และไม่ผูก Fu / หางเสือหาไฟล์เลื่อนไปข้างหน้าตรงไปยัง(kbd "<return>")? ดูเหมือนว่าจะสะอาดกว่านี้เพียงแค่เรียกใช้ helm-execute-persistent-action โดยตรงภายในฟังก์ชันใหม่
zck

น่าเสียดายที่มันใช้ไม่ได้สำหรับฉัน Symbol's value as variable is void: helm-find-files-mapครั้งแรกของทั้งหมดที่ฉันได้รับ เมื่อฉันใส่(helm-mode 1)หลังจากที่(require 'helm)ฉันไม่ได้รับข้อผิดพลาดดังกล่าว แต่มันก็ไม่ทำงาน ความคิดใดที่ฉันอาจจะหายไป? นี่คือ init.el ที่สมบูรณ์แบบของฉัน: pastebin.com/drFZsDxWเวอร์ชัน Emacs คือ 24.4.1 (i686-pc-mingw32)
Geier

ไม่ได้ผลสำหรับฉัน แม้ว่าdefine-keyฉันจะลองC-h k RETใช้ minibuffer ในการค้นหาไฟล์มันก็ยังคงแสดงhelm-confirm-and-exit-minibufferอยู่
Rafael Ibraim

@RafaelIbraim ลองใช้ (kbd "RET")
netawater

0

ฉันไม่สามารถแสดงความคิดเห็นกับคำตอบของ Fu86 ได้เนื่องจากตัวแทน แต่ฉันก็คอยปกป้องมันด้วย (ขออภัยถ้านี่ไม่ใช่โปรโตคอลปกติ) ฉันได้รับฟังก์ชั่นโมฆะโดยใช้คำตอบของเขาเนื่องจาก "helm-find-files-map" มันใช้งานได้สำหรับฉันที่จะใช้แผนที่สำคัญ "helm-map" แทน ยังไม่มีความขัดแย้งและเป็นพฤติกรรมที่ฉันมองหา

... (define-key helm-map (kbd "<return>") 'helm-execute-persistent-action) ...


-1

ฉันไม่สามารถรับคำตอบของ @ Fu86 ให้ทำงานได้ แต่สิ่งต่อไปนี้เหมาะสำหรับฉัน

(defun jkf/helm-find-files-navigate-forward (orig-fun &rest args)
  (if (file-directory-p (helm-get-selection)) 
      (helm-execute-persistent-action)
    (apply orig-fun args)))
(advice-add 'helm-confirm-and-exit-minibuffer 
   :around #'jkf/helm-find-files-navigate-forward)

ดูเพิ่มเติมที่: /programming/27652371/how-can-i-change-emacs-helm-find-file-default-action-on-directory-to-be-go-insid

แก้ไข

โซลูชันของฉันทำงานใน helm-20141112.946 แต่ใน helm-20160211.934 มันไม่ทำงานและ @ Fu86 คำตอบคือทางออก

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