ぐるっとぐりっど

日曜プログラマがいろいろ試してみたことを、後の自分のためにまとめておく場所

不良emacsユーザが改めてメタキーを使うキーバインディングを確認した

はじめに

不良といっても、タバコふかしてパラリラパラリラではない。emacsを使うようになってから10年近く立つのに、最近M-sの使い方を知った。これまでメタキーを使う機会といえばM-x、M-%、M-<、M->のみ。あまりにも情けない。これを不良と言わずなんと言おうか(不可とは言わないのが自分への甘えである)。

キーバインドの表示

現在のモードでのキーバインディングを表示するには、describe-bindingsが使える。キーバインドは<f1> bもしくはC-h bだ。helmを導入しているのであればhelm-descbindsを使った方が便利だろう。

キーバインドの調査

今回は、M-○とメタキー+何かで使えるものを調べてみた。
なお、scratchバッファで調べた。結構メジャーモードで違う気がするので、本当はよく使うモード(僕の場合はorg-mode)で調べた方が良いかも。そもそもこういうのは既に他の人もまとめてると思うけど、自分でわからないところを確認しながらの方が覚えられるので。

キーバインド 関数 説明
M-1 .. M-9 digit-argument C-u Nの代わり
M-SPC just-one-space カーソルの位置に複数のスペースがある場合に、全部消して一つのスペースに変えてくれるらしい。半角スペースおよびタブ文字(C-q C-i)が反応すること。全角スペースは反応しないことは確認できた
M-! shell-command シェルのコマンドを実行
M-$ ispell-word ispellでスペルチェックができるようだ(未確認)
M-% query-replace 置換
M-& async-shell-command シェルのコマンド実行を非同期で
M-' abbrev-prefix-mark 動的展開用のコマンドっぽい
M-( insert-parentheses リージョンを()でかこむ
M-) move-past-close-and-reindent 次の ) に移動し、その後ろで改行+インデント
M-* pop-tag-mark etags系のコマンドっぽい。詳細不明
M-, tags-loop-continue etags系のコマンドっぽい。詳細不明
M-- negative-argument C-u - Nの代わり
M-. find-tag etags系のコマンドっぽい。詳細不明
M-/ dabbrev-expand 動的展開の実行
M-: eval-expression ミニバッファにLisp式を求め、それを実行する。C-x C-eのミニバッファ版
M-; comment-dwim 賢いコメント化するやつ
M-< beginning-of-buffer バッファの先頭へ
M-= count-words-region ワードカウント
M-> end-of-buffer バッファの末尾へ
M-@ mark-word カーソル直後の単語をリージョン選択するらしい。実行してみたけどうまく動かなかった
M-\ delete-horizontal-space 連続するスペースを全削除。M-SPCのスペース残さない版かな
M-^ delete-indentation その行のインデント化を削除して、前の行と結合
M-` tmm-menubar ミニバッファでメニューバーを操作できる
M-a backward-sentence 文の先頭へ
M-b backward-word 前の単語へ
M-c seq-capitalize-backward-word 単語の先頭を大文字に
M-d kill-word 単語の終わりまで削除
M-e forward-sentence 文の末尾へ
M-f forward-word 次の単語へ
M-g Prefix Command 行移動関係のプリフィックス
M-h mark-paragraph パラグラフをリージョン選択
M-i tab-to-tab-stop タブを入れる
M-j indent-new-comment-line コメント中で実行すると、改行してコメント化してくれる。(C-jだとただの改行)
M-k kill-sentence 文末まで削除
M-l seq-downcase-backward-word 単語の先頭を小文字に
M-m back-to-indentation インデント以外の行の先頭に移動
M-o facemenu-keymap face系のプリフィックス、行の整形もあるのかな
M-q fill-paragraph 段落を整形してくれる
M-r move-to-window-line-top-bottom 今表示されているウィンドウの行頭・中間・末尾に順番に移動する(バッファではない)
M-s Prefix Command 検索系のプリフィックス
M-t transpose-words 単語を入れ替える(C-tの単語版)
M-u seq-upcase-backward-word 単語を大文字化する(M-cが1文字目だけ大文字かするのに対し、M-uはすべて変える
M-v scroll-down-command 上にスクロール(C-vの反対)
M-w kill-ring-save リージョンのコピー
M-x helm-M-x emacsのコマンド実行(helm入れているので、helm-M-xになってるけど)
M-y yank-pop 履歴をたどってyankするものを選択できる
M-z zap-to-char 指定した文字まで削除する
M-{ backward-paragraph パラグラフの先頭まで移動
M-| shell-command-on-region コマンド実行時にリージョンを標準入力として渡せる
M-} forward-paragraph 次のパラグラフまで移動
M-~ not-modified バッファを修正していないと設定できる。何の役に立つのかよくわからない
M-DEL backward-kill-word 単語の先頭まで削除

まとめ

一通り調べると、メタキーを使うコマンドにもいろいろと便利なものが設定されていることがわかった。ただ、日本語だと、単語系や文、パラグラフがうまく解析できるのかよくわからないから、使いどころが難しいんじゃないかと思う。今回調べた中だと、M-yは使いこなすと便利だと思った。マウスでドラッグするだけで、コピーする設定にしているのだけれど、うっかりコピー先をクリックしたときもドラッグしてしまい、コピーしたものをヤンクできない事故が多発しているけど、M-yを使えば、履歴をたどってもともとコピーしたかったものをヤンクできるので。

不良emacsユーザ脱却のため、ほかのコマンドについても調べていこう。

追記(2016-02-10)

M-yはヤンクした履歴をたどれるだけだったから、ヤンクする前に上書きしてしまうと使えなかった。残念