わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

Emacs初学者を脱出するための7つのおすすめコマンド

学科の1年生へ,そしてEmacs奮闘中のid:hrkt0115311賛江.
以下のコマンドをお贈りします.

  • help-for-help
  • query-replaceとquery-replace-regexp
  • transpose-chars
  • ispell-word
  • undo
  • dabbrev-expand

help-for-help

多機能ヘルプです.個人的には

(global-set-key "\M-?" 'help-for-help)

という設定を入れています.設定方法が分からないという方は,「M-x help-for-help」で起動させてください.
しかし「M-x help-for-help」にせよ「M-?」にせよ,これではまだコマンドが完了していません.もう一つ押します.私が一番よく使うのは「k」です.そのあとさらに,Emacsキーバインドを打ち込むと,コマンド名と意味を教えてくれます.なお,新たなバッファが出てきますが,C-x 0 としなくても,q だけで閉じます.
次に使うのは,「M-? a 関数(コマンド)名の一部 RET」で,正しい関数(コマンド)名とその使い方が出てきます.
詳しくはMeadow/Emacs memoのhelp-for-helpをどうぞ.

query-replaceとquery-replace-regexp

対話的に置換をするコマンドです.カーソル*1から,バッファの終わりまでを対象として,置換候補にカーソルが移り,置換するかどうかを尋ねてきます.
答えはいずれも1ストローク.Enterは打ちません.

  • y:そこを置換して,次の置換候補へ飛ぶ
  • n:そこを置換せず,次の置換候補へ飛ぶ
  • !:そこから終わりまでのすべての箇所を置換する
  • C-g*2:そこを置換せず,置換作業を終了する

文字列を文字列に置換するためのコマンドはquery-replaceで,そのためのキーバインドはM-%です.日本語キーボードなら,AltとShiftを押しながら,テンキーでないほうの5です.
例えば行頭の特定の文字列だけ,となると,query-replace-regexpを使います.キーバインドはC-M-%です.Alt,Shift,Ctrlを左手の親指,小指,薬指*3で押しながら,右手の人差し指で,テンキーでないほうの5を押しています.正規表現ですので,「行頭の『\』から始まる…」とかいったのを置換するのは,複雑になりますが,これはこれで自学自習のしがいがあると思います.
Meadow/Emacs memoの基本的な置換機能正規表現による置換機能もどうぞ.

transpose-chars

(global-set-key "\C-t" 'transpose-chars)

Meadow/Emacs memoには載っておらず,代わりにテキストの入れ換えが見つかりました.C-tは,

  • 行の途中にカーソルがあれば,カーソル上の文字と,その一つ前の文字を入れ替え,カーソルが一つ次に進む
  • 行の末尾にカーソルがあれば,直前の2文字を入れ替える(カーソルはそのまま)

というものです.bashzshでも使えます.(Emacs限定ですが)改行も1文字とみなします.
お遊びとして,「mtakehiko」とあるとき,「t」にカーソルと合わせて,このC-tを連打すると,「m」が後ろに移動していきます*4
楽しいコマンドなのですが,Emacsでも,GNU screenでも,このキーバインドを別のものに設定されがちで,そういうのを見るたび,寂しさを覚えます.

ispell-word

個人的に使用しているMeadowで,M-? k M-$とすると,「M-$ runs the command ispell-word」と出ます.
M-$ とすると,カーソル上の単語をスペルチェックしてくれます.
ispellだったかaspellだったか,スペルチェッカが別途必要です.
ついでに,M-x ispell-buffer は,バッファ全体,M-x ispell-region は,指定した領域を対象として,スペルチェックしてくれます.自分の環境では,日本語や,TeXのコントロールシーケンスを無視してくれるので,論文などのチェックに欠かせません.

undo

アンドゥ,すなわち「さっきの取り消し」のコマンドはいろいろあります.

C-/ runs the command undo
  which is an interactive compiled Lisp function in `simple.el'.
It is bound to C-_, <undo>, C-/, M-DEL, <menu-bar> <edit> <undo>.

自分は長年,C-x u というのを使っていました.C-/ に切り替え中です.
リドゥ,すなわち「さっきの取り消しは取り消し」をしたいとき,redoというコマンドはありませんが,アンドゥ直後にカーソルを動かすだとか C-g とするだとか,とにかく「何も編集をしないコマンド」を実行したあとで,アンドゥのコマンドをすると,リドゥと同じことをしてくれます.

dabbrev-expand

M-/ runs the command dabbrev-expand

「動的略語展開」と言います.Emacsのさまざまなコマンドとともに,この M-/ をコーディングで意識して使えるように,例えば長い関数名や変数名をこのキーバインドで出せるようになれば,初級者は卒業です.
利用例は,「動的略語展開」の結果 - わだいのたけひこのざっきをご覧ください.

*1:今いる位置のこと.バッファの先頭ではないので注意.バッファ全体で置換したければ,まず M-< でバッファの先頭に移動します.全置換&&今いる位置を残したいなら,「C-x 2 M-< M-% (ミニバッファでごにょごにょ) C-x 0」とします.

*2:「q」でもいいのですね.

*3:Aのキーの左隣にCtrlがあるためです.そうでないキーボードの方は,環境に合わせて,読み替えてください.

*4:この例で一気に「takehikom」としたいなら,M-8 C-t です.ただ実用上は,killやyankといった,Emacs流のコピペを使えばいいのですけどね.