Como devo alterar meu fluxo de trabalho ao passar do IDO para o Helm

44

Como novato no Emacs, encontrei o IDO e adorei, pois tornava a pesquisa de arquivos muito mais rápida. Depois de passar algum tempo neste site, li mais e mais sobre Helm e estou planejando fazer a troca. Algumas das minhas perguntas são:

  1. Quais são as maiores diferenças?
  2. Especificamente, como meu fluxo de trabalho deve mudar ao localizar arquivos, alternar buffers ou chamar novos comandos?

Eu usei este post para configurar o Helm, mas minhas pesquisas de arquivo ( C-x C-f) e opções de buffer ( C-x b) têm a mesma aparência de antes.

Aqui está a minha configuração:

(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)
Ryan
fonte
1
Como você já percebeu, você esqueceu de vincular comandos específicos do Helm para substituir os comandos Emacs padrão. Se você continuar lendo os guias para cada comando Helm específico, verá que eu coloco combinações de teclas (se possível) e configuro em cada seção. No entanto, aproveite Helm :)
Tu Do

Respostas:

29

ATUALIZADO (alterações de leme, alterações de configuração pessoal e comentários de Tu Do).

Mudei de IDO para Helm há alguns anos e nunca olhei para trás.

  • Acho a apresentação mais limpa do que digamos ido-vertical-mode, por exemplo.
  • O Helm não possui correspondência flexível.
  • Você não precisa de smex, etc. Helm faz tudo.
  • O artigo Tu do é bom, pois fornece algumas capturas de tela animadas do que Helm pode fazer.

Eu uso o projétil Helm, Helm swoop, Helm semântico, Helm ag e alguns dos comandos interativos do Helm. Caixa da página Melpa pacotes relacionados Helm interessantes.

Aqui estão algumas das minhas configurações relacionadas ao 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)
rimero
fonte
@ Ryan Observe que o padrão helm-boring-file-regexp-listcontém muito mais do que o apresentado aqui. Se você usar a configuração do remiro, observe este ponto. Provavelmente esta é a sua preferência. helm-input-idle-delaye helm-idle-delay defaultforam 0,01 meses atrás, para obter a resposta mais rápida possível. No geral, a configuração está boa.
Tu Do
Seu alinhamento é muito bom! Como você configura isso?
fommil 14/01
Obrigado @fommil, eu apenas uso 'align-regexp' com '#' como parâmetro e ocasionalmente multiple-cursors.
rimero
Sua resposta é muito boa. No entanto, eu tenho uma pergunta - usando o Projectile + Ido e projectile-find-filepop apenas uma única linha na parte inferior da tela, Helm + Projectile exibirá uma janela pop-up. Existe uma opção para alterar esse comportamento?
Ven
@Ven, existem algumas opções para exibir as conclusões de IDO verticalmente, como emacswiki.org/emacs/InteractivelyDoThings#toc24 , github.com/creichert/ido-vertical-mode.el , github.com/larkery/ido-grid-mode .el .
rimero