Emacsでキーバインドの割当変更について

Emacsではデフォルトでほとんどのキーにコマンドが割り当てられている。しかし、キーによってはほとんど使わないコマンドが割り当てられていたりする。
キーバインドの割当を変更する上でどのキーにどんなコマンドが割り当てられているかを確認し、そのキーの割当が変更可能かどうかを確認する。

割当変更可能かどうかは、terminal上で起動したEmacsでの場合とする。
X Emacsについては最後に記述。

キーバインド

割当変更: ○可能△可能だがおすすめしない×不可

キー コマンド 説明 割当変更
C-a move-beggining-of-line 行の先頭へ移動
C-b backward-char 1文字前に移動
C-c (prefix-command) modeによって操作が変わる
C-d delete-char カーソル位置の文字を消す
C-e move-end-of-line 行の最後へ移動
C-f forward-char 1文字後に移動
C-g keyboard-quit 入力のキャンセルなど
C-h delete-backward-char 1文字前を消す
C-i TAB(タブキー) インデントなど ×
C-j newline-and-indent 改行してインデント
C-k kill-line 現在の行のカーソル位置より後ろを消す
C-l recenter-top-bottom カーソル位置が画面の上部、中央、下部くるように移動
C-m newline(RET,エンターキー) 改行 ×
C-n next-line 次の行へ移動
C-o open-line カーソル位置に空行を入れる
C-p previous-line 前の行へ移動
C-q quoted-insert 文字コードで直接入力できる
C-r isearch-backward 前検索
C-s isearch-forward 後検索
C-t transpose-chars 文字を前後入れ替え
C-u universal-argument C-u数値commandでcommandを数値回実行
C-v scroll-up 画面を下にスクロール
C-w kill-region 範囲を消す
C-x (prefix-key) (大抵)固定の操作
C-y yank 貼り付け
C-z suspend-frame Emacsを一時停止してシェルに戻る
C-[ Esc(エスケープキー) ESCとして動作 ×
C-] abort-recursive-edit 再帰編集を抜ける(不明)
C-\ toggle-input-method 入力切り替え
C-; (不可) キーコードがとれないため使えない ×
C-' (不可) キーコードがとれないため使えない ×
C-, (不可) キーコードがとれないため使えない ×
C-. (不可) キーコードがとれないため使えない ×
C-/ undo 前の変更を取り消す.C-_, C-xuも同様
C-- C-_(undo) C-_として動作 ×
C-= (不可) キーコードがとれないため使えない ×
C-` (不可) キーコードがとれないため使えない ×
C-@ set-mark-command マークセット
C-SPACE set-mark-command マークセット
C-1 (不可) キーコードがとれないため使えない ×
C-2 C-@ C-@として動作 ×
C-3 ESC ESCとして動作 ×
C-4 C-\ C-\として動作 ×
C-5 C-] C-]として動作 ×
C-6 C-^(undefined) C-^として動作 ×
C-7 C-_ C-_として動作 ×
C-8 DEL(delete-backward-char) DELとして動作 ×
C-9 (不可) キーコードがとれないため使えない ×

割り当てを変えるなら(自分の設定)

C-j => anythingのprefix-key

EnterとTABの操作をあわせただけ、Emacsの設定で改行時の自動インデントもできるし専用キーはもったいない。
C-jは最高の位置にあるキーなので割り当てはよく考えるべき。
自分はanythingのprefixとしてC-jiでimenuとかC-jfでfind-fileとかにしてます。

C-o => completion系

これもC-p C-a RETとかで代用可能。
自分は補完操作を割り当ててます。autocompleteやanythingとか。

C-q

タブがスペースになるときにどうしてもタブを入力したいなど、たまにどうしても必要になります。
ただ、めったにないのでM-x(execute-extended-command)から実行するのもあり。
一回入力したらコピペもできるし、anythingでEmacs Command History使っていれば同じコマンドを連続で使うのも苦じゃないはず。
自分は今のところ変更していない。C-qは結構使いづらいため。

C-t => Undefined(screenのprefix-keyのため)

使う人はよく使うらしい文字入れ替え。大抵消してから打ち直ししてるの で使わない。
自分はC-tのバインドを完全に消してます。screenのprefixをC-tにしてるため誤爆しないように。

C-u

n回連続実行。Vimでは便利だけど、Emacsだと(自分は)あまり使わないかな。M-xから実行で代用可能。複雑なものはキーマクロ使うので。
自分はまだ割当変えていないけど、次何か必要になればこれを変えます。

C-](C-5)

コマンドを使ったことないので変えても平気だろう。ただし位置がかなり遠い。
自分は変更していない。

C-/ C-_

undoは選択肢がいくつかあるのでどれか一つ残せば良いと思う。
いつもC-_(C--)を使っているのでC-/は変えても良いかな。
ただしC-_の場合、X Emacsを使ってるときと操作が変わってしまうので注意(後述)。
自分は変更していない。

C-@ C-SPACE

マークセット系。大抵の人はC-SPACEを使っているはず。C-@は日本語キーボードでも英字キーボードでもそこそこの位置にあるので選択肢としてはあり。
自分は変更していない。

X Emacsでのキーバインドの割当変更

X Emacsではterminal上のEmacsとは異なり、全ての組み合わせのキー割当が変更可能である。
例えばC-1のようにそもそもキーコードがとれなかったものも割当可能になる。
また、C-[などのように他のキーとして動作していたのものも独自に割当可能になる。

全てのキーが割当可能になるため、非常に多くの選択肢ができる。
しかし、terminal上のEmacsキーバインドが異なるため混乱する可能性がある。