smex 20151212.1409(in MELPA)
M-x interface with Ido-style fuzzy matching.

概要

smex.el は、 M-xidoflex-match
(あいまいマッチ) に対応させます。

idoのあいまいマッチとは、文字と文字の間に
その文字以外の任意の文字が入ることを許可するという意味です。

言葉で説明するとわかりにくいので、
ido.elの該当コードを抜き出してみると…

(let ((ido-text "bar"))
  (concat (regexp-quote (string (aref ido-text 0)))
          (mapconcat (lambda (c)
                       (concat "[^" (string c) "]*"
                               (regexp-quote (string c))))
                     (substring ido-text 1) "")))
;;; => "b[^a]*a[^r]*r"

bar と入力すると正規表現 b[^a]*a[^r]*r で検索するということです。

なので、rudeと入力すると「ruby-mode」にマッチするのです。

これは現時点での helm つまり M-x helm-M-x にはない機能です。

また、ウィンドウ構成を崩さないので
目線が移動しないというメリットもあります。

M-x をカイゼンしたい、けれどhelmはいまいち好きになれない…
という方はぜひともおすすめです。

また、メジャーモードに対応するコマンドのみを列挙する
M-x smex-major-mode-commands も用意しています。

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.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/")))

初めてsmexを使う方は
以下のコマンドを実行します。

M-x package-install smex

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name smex

設定 141216055219.smex.el(以下のコードと同一)

(smex-initialize)
(global-set-key (kbd "M-x") 'smex)
(global-set-key (kbd "M-X") 'smex-major-mode-commands)
;; This is your old M-x.
(global-set-key (kbd "C-c C-c M-x") 'execute-extended-command)

実行方法

$ wget http://rubikitch.com/f/141216055219.smex.el
$ emacs -Q -f package-initialize -l 141216055219.smex.el

20141216055435.png
Fig1: M-xがido化!あいまい検索対応

20141216055453.png
Fig2: M-Xはメジャーモードに関するコマンドのみ

本サイト内の関連パッケージ


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。