よく利用する場所に素早くジャンプする
よく利用する場所。個人的には、設定ファイルを集約したOrgファイルであるdotfiles.orgや、直近で開発を進めているプロジェクトのルートディレクトリがそれにあたるでしょうか。
これらに素早く移動するEmacsの機能としてまず思い浮かぶのはRegisterでしょう。でも私はこれ、うまく使えません。理由はいくつか思いつきます。まずRegisterでジャンプするためのコマンド、jump-to-registerのデフォルトキーバインドがイマイチすぎる。それならもちろんリバインドするわけですが、それでもまだまだ不満は残ります。Emacsの再起動後に登録したRegisterが使えない。これも以下のコードで一応は解決ができるのですが、不意に消えてたりもするのでなかなかしんどいです。
(add-to-list 'savehist-additional-variables 'register-alist)
すいません。Registerをディスりすぎましたが、それだけ真剣に使おうとしたことは付言しておきます。
じゃあ、Bookmarkだ。そうだ。僕らにはBookmarkがある!でも bookmark-jump にしても consult-bookmark にしても、Bookmark名を入力しなきゃいけない。違うんだ。もっと短いタイプ数じゃなきゃダメなんだ。
そこで私が行きついたのが、Bookmark名を入力するキーボードマクロをつくりこれを実行するという方法。これを好みの(短めの)キーにバインドすればめでたく目的達成です。私はH-kとそれに続くキーで目的の場所ごとのショートカットをつくれるようにしました。ジャンプするためのキーボードマクロを登録したあと、これを保存するコードを自動生成するコマンドもつくりました。
Elisp Code for Inserting Last KBD Macro for my/kmacro-map
(defun my/insert-last-kbd-macro (macroname keys)
"Customized `insert-kbd-macro' to bind last recorded kbd macro to `my/kmacro-map'.."
(interactive (list (read-string "Macro name: ")
(read-string "Keys (following H-k): ")))
(kmacro-name-last-macro (intern macroname))
(insert-kbd-macro (intern macroname))
(insert "(keymap-set my/kmacro-map")
(insert (format " \"%s\"" keys))
(insert (format " #'%s)" macroname)))
これで今のところ快適に2キータイプで移動できています。