helm-swoopでEmacsを位置同期検索

最近、elispが少しずつ分かり始めてEmacsに取り憑いています。

今回は2作目のelispを書きました。helmの拡張機能です。
前作の副産物ですが、こちらは誰でも使えると思います。

helm-swoop

選択範囲を検索ワードに使うこともできます。変数や関数がどこで使われているのかなど、tag系の検索ツールでは手の届かない所までカバーできるかと思います。

isearch実行中に[M-i]を押すとhelm-swoopに移行。またhelm-swoop実行中に[M-i]を押すと開いている全バッファを対象にしたhelm-multi-swoop-allに移行します。

編集機能: helm-swoopまたはhelm-multi-swoop(-all)を実行中に[C-c C-e]と押すことでリストを編集して、バッファに反映[C-x C-s]させることができます。[C-SPC]で編集したい行をいくつかマークしておくと、[C-c C-e]で編集モードに移行した際にその行だけが編集対象となります。

Multiline機能: M-5 M-x helm-swoop や C-u 3 M-x helm-swoop とすることで複数の行単位で使用できます。

helm-swoop2

github - ShingoFukuyama / helm-swoop

MELPAからもインストール可能です。

設定はこんな感じで


;; helm from https://github.com/emacs-helm/helm
;; helm-swoopを使うためにはhelmが必要です
(require 'helm)

;; helm-swoopフォルダを任意の位置に置きます
(add-to-list 'load-path "~/.emacs.d/elisp/helm-swoop")
(require 'helm-swoop)

;; キーバインドはお好みで
(global-set-key (kbd "M-i") 'helm-swoop)
(global-set-key (kbd "M-I") 'helm-swoop-back-to-last-point)
(global-set-key (kbd "C-c M-i") 'helm-multi-swoop)
(global-set-key (kbd "C-x M-i") 'helm-multi-swoop-all)

;; isearch実行中にhelm-swoopに移行
(define-key isearch-mode-map (kbd "M-i") 'helm-swoop-from-isearch)
;; helm-swoop実行中にhelm-multi-swoop-allに移行
(define-key helm-swoop-map (kbd "M-i") 'helm-multi-swoop-all-from-helm-swoop)

;; Save buffer when helm-multi-swoop-edit complete
(setq helm-multi-swoop-edit-save t)

;; 値がtの場合はウィンドウ内に分割、nilなら別のウィンドウを使用
(setq helm-swoop-split-with-multiple-windows nil)

;; ウィンドウ分割方向 'split-window-vertically or 'split-window-horizontally
(setq helm-swoop-split-direction 'split-window-vertically)

;; nilなら一覧のテキストカラーを失う代わりに、起動スピードをほんの少し上げる
(setq helm-swoop-speed-or-color t)