- imenus 20170217.47(in MELPA)
- Imenu for multiple buffers and without subgroups
概要
これはすごいものを見つけました。
imenus.el は2つのコマンドにより
M-x imenu を超強化するパッケージです。
M-x imenus は通常のimenuと機能的にはほぼ同じですが、
以下の点が強化されています。
- M-rでimenuの情報を再取得(Rescan)
- M-oで M-x multi-occur へ移行
- M-sで isearch へ移行
M-x imenus-mode-buffers は imenu-anywhere.el(レビュー) 同様
同一メジャーモードのすべてのバッファまでimenuの範囲を広げます。
つまり、開いている同じプログラミング言語のバッファの
関数定義へ手軽にジャンプできるということです。
multi-occurへ移行できることから、
関数呼び出しへもすぐにジャンプできます。
本設定ではido-occasional.el(レビュー) と
ido-vertical-mode.el(レビュー) でimenuを縦ido化しています。
multi-occurといったらhelm-swoop(レビュー) ってことで、
helm-swoop.elとも連携させました。
imenus-mode-buffersをC-M-sに割り当てていて、
なおかつC-M-sで M-x helm-multi-swoop を呼び出すようにしているので、
C-M-s C-M-sで関数呼び出しをhelm-swoopできちゃいます!
正直、今までhelm-multi-swoopは遅すぎて使えないと思っていたのですが
imenusと併用することで評価は180度変わってしまいました。
この快適さは使ってみなければわかりません。
ぜひともインストールしましょう。
imenu-anywhere.elやidomenu.el(レビュー) と機能は同じですが、
occurやhelm-swoopへ移行できるのでこちらの圧勝です!!
Fig1: C-M-sを押し、現在のシンボルがデフォルトで選択される
Fig2: M-oで関数定義・呼び出しをシンボルoccur
Fig3: C-M-sでのimenuのスコープは同一メジャーモード全バッファ
Fig4: もう一度C-M-sでhelm-multi-swoop発動!!
インストール
パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。
(package-initialize) (setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/") ("melpa" . "http://melpa.org/packages/") ("org" . "http://orgmode.org/elpa/")))
初めてimenusを使う方は
以下のコマンドを実行します。
M-x package-install imenus
アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。
M-x package-install package-utils (初めてアップグレードする場合のみ) M-x package-utils-upgrade-by-name imenus
さらに
M-x package-install ido-occasional
M-x package-install ido-vertical-mode
M-x package-install helm-swoop
も実行してido/helm-swoop化してしまえば超絶快適です。
設定 150409051422.imenus.1.el(以下のコードと同一)
(require 'ido-occasional) (require 'ido-vertical-mode) (require 'helm-swoop) (require 'imenus) (setq ido-enable-flex-matching t) (ido-vertical-mode 1) (setq ido-vertical-define-keys 'C-n-and-C-p-only) ;;; エラー対策 (defun imenu-find-default--or-current-symbol (&rest them) (condition-case nil (apply them) (error (thing-at-point 'symbol)))) (advice-add 'imenu-find-default :around 'imenu-find-default--or-current-symbol) ;;; なぜか現在のシンボルを取ってくれないから (defun imenus-exit-minibuffer () (exit-minibuffer)) ;;; ido化: imenus/with-ido imenus-mode-buffers/with-idoを定義 (with-ido-completion imenus) ;; C-M-s C-M-sで現在のシンボルをhelm-multi-swoopできるよ! (global-set-key (kbd "C-M-s") (with-ido-completion imenus-mode-buffers)) ;;; M-oでのmulti-occurをシンボル正規表現にするよう改良 (push '(occur . imenus-ido-multi-occur) imenus-actions) (defun imenus-ido-multi-occur (buffers input) (multi-occur buffers (format "\\_<%s\\_>" (regexp-quote (replace-regexp-in-string "^.*|" "" input))))) ;;; C-M-sで関数呼び出しをhelm-multi-swoopできるようにした (push '(helm-multi-swoop . imenus-helm-multi-swoop) imenus-actions) (defun imenus-helm-multi-swoop (buffers input) (helm-multi-swoop (replace-regexp-in-string "^.*|" "" input) (mapcar 'buffer-name buffers))) (define-key imenus-minibuffer-map (kbd "C-M-s") 'imenus-exit-to-helm-multi-swoop) (defun imenus-exit-to-helm-multi-swoop () "Exit from imenu prompt; start `helm-multi-swoop' with the current input." (interactive) (setq imenus-exit-status 'helm-multi-swoop) (imenus-exit-minibuffer))
実行方法
$ wget http://rubikitch.com/f/150409051422.imenus.1.el $ emacs -Q -f package-initialize -l 150409051422.imenus.1.el
本サイト内の関連パッケージ
- imenu-list - Show imenu entries in a seperate buffer
- ido-occasional - Use ido where you choose.
- ido-vertical-mode - Makes ido-mode display vertically.
- helm-swoop - Efficiently hopping squeezed lines powered by helm interface
- idomenu - imenu tag selection a la ido
- imenu-anywhere - ido/ivy/helm imenu across same mode/project/etc buffers
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。