Emacsでキーバインドをカスタマイズするための覚書
忘れないようにメモしておきます。
とりあえず僕が知ってるネタはここに全部書きました。
- global-set-key を使って C-x l に goto-line(指定行へジャンプ)をバインドする
(global-set-key "\C-xl" 'goto-line)
- ↑と同じことを define-key を使って
(define-key global-map "\C-xl" 'goto-line)
- ↑と同じことを ctl-x-map を使って
(define-key ctl-x-map "l" 'goto-line)
キーバインドの割り当てには define-key が使える。
define-key の次にあるのはキーマップというやつで、
Emacs で使える一番基本的なキーマップは global-map という。
また、他にもモードごとに色々なキーマップがある。
例えば、dired-mode-map とか ruby-mode-map とか。
ruby-mode-map に設定を追加する場合の例。
(define-key をフックの設定の中に書く。)
(add-hook 'ruby-mode-hook '(lambda () (define-key ruby-mode-map "\C-xl" 'goto-line)))
define-key の使い方まとめ。
- モードごとに使うバインドの場合 → そのモード用のキーマップを使う
- 全般的に使うバインドの場合 → global-map を使う
define-key global-map と global-set-key のどちらを使うかは
もう好みによると思うんだけど僕は global-set-key の方が好きです。
あと、ctl-x-map は "\C-x" の代わりに使える。
特殊キーをバインドしたい場合は [] を使う。
特殊キー | 対応する [] |
---|---|
BackSpace | [DEL], [backspace] |
Del | [delete] |
Home | [home] |
Enter | [return] |
Help | [help] |
PageUp | [prior] |
PageDown | [next] |
↑ | [up] |
↓ | [down] |
← | [left] |
→ | [right] |
テンキーの 0〜9 | [kp-0] 〜 [kp-9] |
テンキーの Enter | [kp-enter] |
- 具体例
(global-set-key [f5] 'goto-line)
- 特殊キーと修飾キーの組み合わせ。Control-Alt-F5
(global-set-key [C-A-f5] 'goto-line)
- C-x と特殊キーの組み合わせ
(define-key ctl-x-map [return] 'goto-line)
実は C-x RET に anything をバインドしたくて色々調べたのが
このエントリを書くきっかけだったりします。
anything.el 便利だよ!
追記
- モードごとに設定するところに少し加筆しました。
- C-x RET に割り当てていた anything ですが、C-x RET には大事な機能が備わっていたので C-x b に変更しました。
- 本文で挙げた方法の他にも、幾つか方法があることが分かりました。参考: キーバインドの指定方法 - odz buffer
- キーボードの配置をいじってる人しか関係ないと思うけど、C-> の割り当てを変更したい場合は kbd 関数を使って以下のようにすればいいことが分かった。
(global-set-key (kbd "C-<") 'beginning-of-buffer)