ここからは、個人的なキーバインドをいくつかご紹介します:
;;; Compare windows (keymap-global-set "C-c w" 'compare-windows)
compare-windowsは、現在のウィンドウのテキストと次のウィンドウのテキストを比較する便利なコマンドです。各ウィンドウのポイントから開始し、一致するところまでテキストを辿ることで比較を行います。私はこのコマンドをいつも使っています。
これにより、すべてのモードでグローバルにキーを設定する方法も分かります。
主要な設定コマンドは keymap-global-set
です。その後にキーバインドが続きます。.emacs
ファイルでは、キーバインドは次のように記述されます。C-c は Control-C を表し、これは
Control キーと c キーを同時に押すことを意味します。w は w
キーを押すことを意味します。キーバインドは二重引用符で囲まれます。(CTRL キーではなく META キーをバインドする場合は、.emacs ファイルに
M-c と記述します。詳細は The GNU Emacs
Manual の Rebinding
Keys in Your Init File を参照してください。)
キーによって呼び出されるコマンドは compare-windows です。なお、compare-windows の前にはシングルクォートが付いています。そうでなければ、Emacs
はまずシンボルを評価してその値を決定しようとします。
ダブルクォートとシングルクォートというこの2つは、キーバインドに欠かせない要素なのですが、つい忘れがちです。幸いなことに、既存の.emacsファイルを確認して、そこに書かれている内容を調整すればよいのだと、今では思い出せるようになりました。
キーバインド自体についてですが、C-c w となります。これはプレフィックスキー C-c と、単一の文字(この場合は w)を組み合わせたものです。このキーセット C-c に続く単一の文字は、厳密に個人利用用に予約されています。(これらは私自身の利用用であるため、個人用キーと呼んでいます。)他者のキーバインドを侵害することなく、常に自分用にこのようなキーバインドを作成できるはずです。もし Emacs の拡張機能を開発する場合は、これらのキーを公開利用することは避けてください。代わりに C-c C-w のようなキーを作成してください。さもないと、個人用キーが底をついてしまいます。
こちらがコメント付きの別のキーバインドです:
;;; Key binding for 'occur' ; I use occur a lot, so let's bind it to a key: (keymap-global-set "C-c o" 'occur)
occur
コマンドは、現在のバッファ内で正規表現に一致するすべての行を表示します。リージョンがアクティブな場合、occur は一致箇所をそのリージョン内に限定します。そうでない場合は、バッファ全体を対象とします。一致する行は
*Occur*
というバッファに表示されます。このバッファは、出現箇所へジャンプするためのメニューとして機能します。
キーをバインド解除して、動作しないようにする方法は以下の通りです。
;;; Unbind 'C-x f' (keymap-global-unset "C-x f")
このアンバインドには理由があります。C-x C-fと打つつもりが、うっかりC-x fと入力してしまったのです。意図していたようにファイルを探すのではなく、誤って塗りつぶしテキストの幅を設定してしまい、そのほとんどが望まない幅になっていました。デフォルトの幅に戻すことはほとんどないため、単純にキーの割り当てを解除しました。
以下は、既存のキーを再バインドします:
;;; Rebind 'C-x C-b' for 'buffer-menu' (keymap-global-set "C-x C-b" 'buffer-menu)
デフォルトでは、C-x C-b は list-buffers コマンドを実行します。このコマンドは、別の
ウィンドウにバッファを一覧表示します。私はほぼ常にそのウィンドウで何かを行いたいため、バッファを一覧表示するだけでなく、ポイントをそのウィンドウに移動させる
buffer-menu コマンドを好んで使っています。
従来、キーは現在はレガシーと見なされている低レベル関数 global-set-key
を用いてグローバルにバインドされていました。keymap-global-set
の使用が推奨されますが、さまざまな箇所で global-set-key
を目にすることになるでしょう。本セクションの最初の例は、global-set-key
を用いて次のように書き換えることができます。
(global-set-key "\C-cw" 'compare-windows)
keymap-global-setと非常に似ていますが、キーバインドはわずかに異なる形式になっています。Control-CはC-cではなく、\C-cで表されます。この例の\C-cとwのように、キー入力の間にスペースはありません。こうした違いはあるものの、ドキュメント上では可読性を高めるため、引き続きC-c wと表記されています。
従来、キーは現在はレガシーと見なされている下位関数 global-unset-key
を用いてグローバルにアンバインドされていました。そのキーバインド形式は global-set-key
に準拠しています。本セクションのキーアンバインドの例は、次のように書き換えることができます:
;;; Unbind 'C-x f' (global-unset-key "\C-xf")