Emacsでhelmを使う

kotohが2015/07/23 19:10:56に投稿

Emacs に helmをインストール

helmとは

Emacsで行う操作に「統一されたインターフェイス」を提供するフレームワークです。
統一されたインターフェイスというのは、「インクリメンタルに検索し、実行する」ということです。
これは、言葉で説明してもよく分からないと思いますが、一度使うとEmacsに欠かせないものになると思います。

僕はhelmの前身であるanythingをずっと使っていましたが、最近helmに移行しました。
インストール方法と設定を載せます。

インストール

melpaからインストールします。

M-x package-list-packages

helm を選択(i) し、インストール(x)します。

init.elに

(require 'helm-config)
(helm-mode 1)

で、helm使えるようになります。

設定

使い方には好みがあると思います、僕は次のように設定しています。

  • find-file (C-x C-f)はそのまま使う
  • C-h でミニバッファの文字を削除
  • TABで補完
  • M-y でキルリングを検索
  • helm-miniを C-; に割り当てる
  • helm-miniにemacs-commandを追加
(add-to-list 'helm-completing-read-handlers-alist '(find-file . nil))

(define-key helm-map (kbd "C-h") 'delete-backward-char)
(define-key helm-find-files-map (kbd "C-h") 'delete-backward-char)
(define-key helm-find-files-map (kbd "TAB") 'helm-execute-persistent-action)
(define-key helm-read-file-map (kbd "TAB") 'helm-execute-persistent-action)

(defvar helm-source-emacs-commands
  (helm-build-sync-source "Emacs commands"
    :candidates (lambda ()
                  (let ((cmds))
                    (mapatoms
                     (lambda (elt) (when (commandp elt) (push elt cmds))))
                    cmds))
    :coerce #'intern-soft
    :action #'command-execute)
  "A simple helm source for Emacs commands.")

(defvar helm-source-emacs-commands-history
  (helm-build-sync-source "Emacs commands history"
    :candidates (lambda ()
                  (let ((cmds))
                    (dolist (elem extended-command-history)
                      (push (intern elem) cmds))
                    cmds))
    :coerce #'intern-soft
    :action #'command-execute)
  "Emacs commands history")

(custom-set-variables
 '(helm-mini-default-sources '(helm-source-buffers-list
                               helm-source-recentf
                               helm-source-files-in-current-dir
                               helm-source-emacs-commands-history
                               helm-source-emacs-commands
                               )))

(define-key global-map (kbd "C-;") 'helm-mini)
(define-key global-map (kbd "M-y") 'helm-show-kill-ring)

バッファの移動、Emacsコマンドの実行を C-; から行なうように設定しています。

helm-ag

The Silver Searcher という高速な検索ツールをhelmで利用することができます。
ag というのは The Silver Searcherのことを指しています。(銀だからagなのか?)

ag をインストールする必要があります。

$ brew install ag

Mac 以外の方法は こちら を参考にして下さい。

M-x package-list-packages

から、helm-agを選択(i)し、インストール(x)します。

init.elに以下を追加します。

(require 'helm-ag)
(setq helm-ag-base-command "ag --nocolor --nogrou")
(global-set-key (kbd "C-c s") 'helm-ag)

(setq helm-ag-base-command ag --nocolor --nogrou) だと、再帰的に検索します。
(setq helm-ag-base-command ag --nocolor --nogrou -n) とするとカレントディレクトリだけを検索対象にします。
検索結果をhelmで更に絞り込むことができるようになります。

個人的にはhelm-do-agの方が使い勝手がよいように思います。
helm-do-ag-this-file でファイル内を検索することができます。