ฉันจะเปลี่ยนเวิร์กโฟลว์ของฉันได้อย่างไรเมื่อย้ายจาก IDO เป็น Helm


44

ในฐานะผู้เริ่มต้นใช้งาน Emacs ฉันพบว่า IDO และรักมันเพราะทำให้การค้นหาไฟล์เร็วขึ้นมาก หลังจากใช้เวลาบนไซต์นี้ฉันได้อ่านเกี่ยวกับเฮล์มมากขึ้นเรื่อย ๆ และฉันก็วางแผนจะเปลี่ยน บางคำถามของฉันคือ:

  1. อะไรคือความแตกต่างที่ยิ่งใหญ่ที่สุด?
  2. เวิร์กโฟลว์ของฉันควรเปลี่ยนอย่างไรเมื่อค้นหาไฟล์สลับบัฟเฟอร์หรือเรียกคำสั่งใหม่

ฉันใช้โพสต์นี้เพื่อตั้งค่า Helm แต่ไฟล์ค้นหาของฉัน ( C-x C-f) และสวิตช์บัฟเฟอร์ ( C-x b) ดูสวยมากเหมือนที่เคยทำมาก่อน

นี่คือการกำหนดค่าของฉัน:

(require 'helm)
(require 'helm-config)

;; The default "C-x c" is quite close to "C-x C-c", which quits Emacs.
;; Changed to "C-c h". Note: We must set "C-c h" globally, because we
;; cannot change `helm-command-prefix-key' once `helm-config' is loaded.
(global-set-key (kbd "C-c h") 'helm-command-prefix)
(global-unset-key (kbd "C-x c"))

(define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action) ; rebihnd tab to do persistent action
(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action) ; make TAB works in terminal
(define-key helm-map (kbd "C-z")  'helm-select-action) ; list actions using C-z

(when (executable-find "curl")
  (setq helm-google-suggest-use-curl-p t))

(setq helm-quick-update                     t ; do not display invisible candidates
      helm-split-window-in-side-p           t ; open helm buffer inside current window, not occupy whole other window
      helm-buffers-fuzzy-matching           t ; fuzzy matching buffer names when non--nil
      helm-move-to-line-cycle-in-source     t ; move to end or beginning of source when reaching top or bottom of source.
      helm-ff-search-library-in-sexp        t ; search for library in `require' and `declare-function' sexp.
      helm-scroll-amount                    8 ; scroll 8 lines other window using M-<next>/M-<prior>
      helm-ff-file-name-history-use-recentf t)

(helm-mode 1)

1
เมื่อคุณรู้แล้วคุณลืมผูกคำสั่งเฉพาะ Helm เพื่อแทนที่คำสั่ง Emacs หุ้น หากคุณยังคงอ่านคำแนะนำสำหรับคำสั่ง Helm แต่ละคำคุณจะเห็นว่าฉันใส่การเชื่อมโยงคีย์ (ถ้าเป็นไปได้) และการตั้งค่าในแต่ละส่วน อย่างไรก็ตามเพลิดเพลินไปกับ Helm :)
Tu Do

คำตอบ:


29

อัปเดต (เปลี่ยนแปลง Helm, เปลี่ยนแปลงการกำหนดค่าส่วนบุคคลและความคิดเห็น Tu Do)

ฉันเปลี่ยนจาก IDO เป็น Helm เมื่อหลายปีก่อนและฉันไม่เคยมองย้อนกลับไป

  • ฉันพบว่างานนำเสนอที่สะอาดกว่าสมมติว่า ido-vertical-mode เป็นตัวอย่าง
  • Helm ไม่มีการจับคู่ที่ยืดหยุ่น
  • คุณไม่ต้องการ smex และอื่น ๆ อีกมากมาย Helm ทำทุกอย่าง
  • บทความของ Tu ทำได้ดีเนื่องจากมีภาพหน้าจอเคลื่อนไหวที่ดีในสิ่งที่ Helm สามารถทำได้

ฉันใช้ projectile ของ Helm, Helm swoop, ความหมายของ Helm, Helm ag และคำสั่งแบบโต้ตอบของ Helm ชำระเงินที่หน้า Melpaสำหรับแพ็คเกจที่เกี่ยวข้องกับ Helm ที่คุณอาจสนใจ

นี่คือการตั้งค่า Helm ของฉันที่เกี่ยวข้อง:

(setq helm-ff-transformer-show-only-basename nil
      helm-adaptive-history-file             "~/.emacs.d/data/helm-history"
      helm-yank-symbol-first                 t
      helm-move-to-line-cycle-in-source      t
      helm-buffers-fuzzy-matching            t
      helm-ff-auto-update-initial-value      t)

(autoload 'helm-descbinds      "helm-descbinds" t)
(autoload 'helm-eshell-history "helm-eshell"    t)
(autoload 'helm-esh-pcomplete  "helm-eshell"    t)

(global-set-key (kbd "C-h a")    #'helm-apropos)
(global-set-key (kbd "C-h i")    #'helm-info-emacs)
(global-set-key (kbd "C-h b")    #'helm-descbinds)

(add-hook 'eshell-mode-hook
          #'(lambda ()
              (define-key eshell-mode-map (kbd "TAB")     #'helm-esh-pcomplete)
              (define-key eshell-mode-map (kbd "C-c C-l") #'helm-eshell-history)))

(global-set-key (kbd "C-x b")   #'helm-mini)
(global-set-key (kbd "C-x C-b") #'helm-buffers-list)
(global-set-key (kbd "C-x C-m") #'helm-M-x)
(global-set-key (kbd "C-x C-f") #'helm-find-files)
(global-set-key (kbd "C-x C-r") #'helm-recentf)
(global-set-key (kbd "C-x r l") #'helm-filtered-bookmarks)
(global-set-key (kbd "M-y")     #'helm-show-kill-ring)
(global-set-key (kbd "M-s o")   #'helm-swoop)
(global-set-key (kbd "M-s /")   #'helm-multi-swoop)

(require 'helm-config)
(helm-mode t)
(helm-adaptative-mode t)

(global-set-key (kbd "C-x c!")   #'helm-calcul-expression)
(global-set-key (kbd "C-x c:")   #'helm-eval-expression-with-eldoc)
(define-key helm-map (kbd "M-o") #'helm-previous-source)

(global-set-key (kbd "M-s s")   #'helm-ag)

(require 'helm-projectile)
(setq helm-projectile-sources-list (cons 'helm-source-projectile-files-list
                                         (remove 'helm-source-projectile-files-list 
                                              helm-projectile-sources-list)))
(helm-projectile-on)

(define-key projectile-mode-map (kbd "C-c p /")
  #'(lambda ()
      (interactive)
      (helm-ag (projectile-project-root))))

(define-key org-mode-map (kbd "C-x c o h") #'helm-org-headlines)

@Ryan สังเกตเห็นว่าค่าเริ่มต้นhelm-boring-file-regexp-listมีมากกว่าที่นี่ หากคุณใช้การตั้งค่าของ remiro ให้สังเกตจุดนี้ อาจเป็นสิ่งที่เขาชอบ helm-input-idle-delayและเมื่อhelm-idle-delay default0.01 เดือนก่อนเพื่อให้สามารถตอบสนองได้เร็วที่สุด โดยรวมแล้วการตั้งค่าทำได้ดี
Tu Do

การจัดตำแหน่งของคุณดีมากจริงๆ! คุณจะตั้งค่าอย่างไร
fommil

ขอบคุณ @fommil ฉันเพียงแค่ใช้ 'จัด-regexp' กับ '#' multiple-cursorsเป็นพารามิเตอร์และบางครั้ง
rimero

คำตอบของคุณดีมาก ฉันมีคำถาม - ใช้ Projectile + Ido และprojectile-find-fileจะปรากฏเพียงบรรทัดเดียวที่ด้านล่างของหน้าจอ Helm + Projectile จะเป็นป๊อปอัพทั้งหมด มีตัวเลือกในการเปลี่ยนพฤติกรรมนี้หรือไม่?
Ven

@Ven มีสองตัวเลือกสำหรับการแสดงความสำเร็จของ IDO ในแนวตั้งเช่นemacswiki.org/emacs/InteractivelyDoThings#toc24 , github.com/creichert/ido-vertical-mode.el , github.com/larkery/ido-grid-mode .el
rimero
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.