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)