Emacs の使い方

初版作成  1990.2.7
最終更新  2024.04.01


◆◆ 起動と終了 ◆◆


$ emacs↓    ↓ は enter キーを押す

で emacs が起動する。

emacs は起動した時点で既に *scratch* *Messages* *Buffer List*
という 3 つのファイルをオープンしている。

emacs を起動した時点では、上述のファイルのうち *scratch*(雑記帳の意 メモなど
を置く場所 セーブされない)を選択しているところからスタートする。emacs では、
オープンしているファイルのことをバッファと呼ぶ。X Window 上で起動するときは

$ emacs -nw↓

のように、no window モードで起動すると、
マウスを使わずにキーボードのみで操作できるので便利である。

C-z     子プロセスの実行。fg で戻る。
C-x C-c  emacs の終了。

(注意!)
C-z はコントロールキーを押しながら z キーを押すことを表し、
M-z は ESC キーを押した後、z キーを押すことを表す。

◆◆ まず覚えるべき事項 ◆◆


C-g     取り消し
C-x u   アンドゥ (C-u にカスタマイズする)


◆◆ ミニバッファ ◆◆


emacs ではファイル名の読み込みやバッファの選択の時などに、
画面の一番下の方にミニバッファをオープンして、その中で指定する。

  TAB (あるいは C-i)

を押すと、補完してくれる。複数の候補がある場合は候補のリストを
別のウィンドウに表示する。

例) test.f というファイルを選択したいと仮定する。
1) ミニバッファを開いて TAB を 2 回押す。現在のファイルの一覧が表示される。
2) t TAB と押す。t で始まるファイル名が 1 つしかないとき最後まで補完する。
3) 候補が 2 つ以上ある時は途中まで補完するので、その次の 1 字を入れて更に TAB
   を押す。

ミニバッファを 1 回でも使ったコマンドは、その履歴が保管される。

C-x ESC ESC  最近のミニバッファのコマンドを再実行する。置換などのコマンドを再実
        行するときなどに便利である。
ESC p      1 つ前のミニバッファコマンドに移る
ESC n      1 つ後のミニバッファコマンドに移る


◆◆ 数引数 ◆◆


emacs のコマンドにはすべて数引数を与えることができる。
引数の数だけそのコマンドを実行する。

例) ウィンドーの大きさを 8 行大きくする
ESC 8 C-x ^   注意:最後の^はコントロールキーの意味ではない

C-u  4 倍する意味を持つ
例) C-u C-n    カーソルを 4 行下げる。
   C-u C-u C-n  カーソルを 16 行下げる。

私は C-u をカスタマイズするので 4 倍する使い方はしない。


◆◆ ファイルの操作 ◆◆


C-x C-f  新しいファイルをオープンして今のウィンドーに表示する。現在編集している
         ファイルは画面から消えるがクローズされるわけではない。
        既にオープンされているファイルを指定したときは、そのバッファを選択する。
C-x C-v  カレントバッファをクローズして新しいファイルをオープンする。
C-x C-s  カレントバッファをセーブする。
C-x C-w  ファイル名を指定してカレントバッファをセーブする。
C-x k   カレントバッファをクローズする。

C-x b   編集するバッファを変更する
C-x C-b  編集するバッファを変更する
           *Buffer List* というバッファに移動する

C-x d      ディレクトリエディタを起動する。
           開くファイル名には * を入れるとよい
           .emacs で (auto-compression-mode t) としておくと
           gz bz2 ファイルも編集できる。

  ファイル選択画面におけるキー操作
  p  1 行上へ
  n  1 行下へ
  f  そのファイルを選択


◆◆ カーソルの移動 ◆◆


        C-p
       ↑
  C-a   C-b ← → C-f    C-e
             ↓
       C-n

C-d   1 字デリート  DEL でも同じ
C-k   行末まで削除。従って C-a C-k で 1 行削除。

C-v   スクロールダウン
ESC v   スクロールアップ
C-l   カーソル位置を画面の中央へ(画面も移動)
ESC r   カーソル位置を画面の中央へ(画面は静止)
ESC <   文頭へジャンプ
ESC >   文末へジャンプ

ESC x goto-line  指定した行へジャンプ


◆◆ マルチウィンドー操作 ◆◆


C-x 2   横分割
C-x 3   縦分割
C-x 0   いまカーソルのあるウィンドーを閉じる
C-x 1   いまカーソルのあるウィンドー以外の全てのウィンドーを閉じる
C-x o   ウィンドー間のジャンプ
C-x ^   ウィンドーの大きさを縦方向に拡大する。通常、数引数をつけて使用する。
      例) ESC 9 ^x ^


◆◆ カット&ペースト ◆◆


カット&ペーストに関するバッファは 2 系統ある。1 つは削除リングを使うもので
C-w 等によって操作する。
削除リングは、はじめと終わりがつながっている一種のスタックで、
Windows のクリップボードに相当する。

もう 1 つはレジスタを使うもので C-x r s a 等のように操作する。

C-SPC   マークの設定(C-SPC を 2 回押すと transient-mark-mode が
      nil の場合でも一時的に enabled になる)
C-x C-x  マークとカーソルの入れ替え
C-w    リージョン(マークとカーソルの間)をカットして削除リングへコピー
ESC w    リージョンを削除リングへコピー
C-y    ペースト(何回でもできる)
ESC y    削除リングを 1 つポップしてペースト

C-x r s a a というレジスタへリージョンをコピー
C-x r i a a というレジスタからカーソル位置へコピー


◆◆ 検索と置換 ◆◆


C-s    順方向へ検索
C-r    逆方向へ検索
C-s C-s  前回行った検索の再実行

検索文字列を入れる時点において
C-w   カーソル位置から 1 単語を、検索文字列として読み込む。
C-y   カーソル位置から行末までを、検索文字列として読み込む。

1 つ候補が見つかった時点において
RET    検索を中止し、その位置へカーソルを移す。
     検索開始時にカーソルがあった地点がマーキングされるので、
     C-x C-x で前のカーソル位置へ戻れる。
C-s   次の候補(文末へ)
C-r   次の候補(文頭へ)
C-g   検索を中止し、カーソルを検索開始時の位置へ戻す。
カーソル移動 or C-SPC
     検索を中止し、カーソルをその場所にとどめる

C-s ↓  日本語の検索  ↓ は Enter キーを表す

ESC %  確認しながら置換(日本語可)。
    ミニバッファを使うので、C-x ESC ESC で再実行できる。

1 つ置換候補が見つかって時点において
y     置換して次に進む
n     置換せずに次に進む
q     置換を終了し、カーソルをその位置へ移す

ESC p   検索リングの 1 つ前の単語
ESC n   検索リングの 1 つ後の単語

ESC : ( setq case-fold-search nil )  大文字と小文字を区別
ESC : ( setq case-fold-search t )    元に戻す


◆◆ 検索時の正規表現 ◆◆


.   任意の一文字
*   0 回以上の繰り返し
+   1 回以上の繰り返し
^   行頭
$   行末
\   メタ文字の機能の抑制  あるいは  特殊構成
()  グループ化
\<  単語の先頭
\>  単語の末尾
\b  単語の先頭あるいは末尾
\B  単語の先頭あるいは末尾以外

\(ab\)+    ab の 1 回以上の繰り返し
ab\|cd     ab か cd かどちらか
\\\(sub\)*section    \section or \subsection or \subsubsection or .....
\<the\>    単語としての the ( thema にはマッチしない )
\blicense?\b   lisence あるいは lisences にマッチする
\bcop\(y\|ies\)\b   copy あるいは copies にマッチ
\Bsign\B   部分文字列として sign を含む単語


◆◆ コンパイルエラーの取り方 ◆◆


以下のことを仮定する。

・コンパイル方法は makefile に書いてある
・プログラムを作成して今からコンパイルする状態である。

1) C-x C-s でいま編集しているバッファをセーブする。
2) ESC x compile↓ と打つ。通常は何らかのキーにカスタマイズしておく。
   画面の下の方に make -k と表示されるのでリターンを押す。
   コンパイルが開始され、エラーメッセージが *compilation* というバッファに蓄えられ、
   他のウィンドーで *compilation* のバッファを表示する。
   つまり、画面にはデバッグ中のプログラムとエラーメッセージがマルチ
   ウィンドーで表示されることになる。
3) コンパイルの開始後、 C-x ` を実行すると、最初のエラーメッセージのある行に
   カーソルが移動する。対応するエラーメッセージは、*compilarion* が表示されている
   ウィンドーの最上部へスクロールする。この操作はコンパイルの途中でも実行できる。
4) 続けて C-x ` を実行すると次のエラー箇所にカーソルが移動する。
5) C-u C-x ` でもう 1 度最初のエラーに戻る。

(setq compile-command "gmake -w -k")

とするとコンパイルコマンドを変更することが出来る。
.emacs の中に記述するか、ESC x set-variable で設定する。


◆◆ フォートランモード ◆◆


emacs にはいくつかのモードがある。拡張子に .f の付いたファイルを編集すると
きは自動的にフォートランモードになる。そうでない時は、

 ESC x fortran-mode ↓

と打てばフォートランモードに入る。フォートランモードでの便利なコマンドについて
解説する。

ESC C-a  サブルーチンの先頭に移動
ESC C-e  サブルーチンの最後に移動
C-c ;   リージョンの全ての行をコメント文にする。
       引数があれば(どんな引数でも良い)元に戻す。
      例)ESC 1 C-c ;
C-c C-w  72 桁目に線を引く

◆◆ コマンド名によるコマンドの実行 ◆◆


emacs では全てのコマンドに名前が付いている。例えば C-d は 1 文字削除するコマン
ドだが、これには (delete-char) という名前が付いている。これらのコマンドは全て
名前によって実行することがきる。

 ESC x コマンド名 ↓

と打てば良い。


◆◆ ヘルプ ◆◆


ESC x help ↓

と打つと、ヘルプを選ぶ画面が開く。
その画面において、たとえば
b  キーバインドと対応するコマンドのリストを表示する


◆◆ shell を実行する ◆◆


ESC x shell ↓

と打つと、*shell* というバッファが作成され、その中で
シェルが実行される。シェル上で実行したコマンドの結果
を取り込む場合に便利である。

ただし、シェルの履歴機能は使えなくなるので、
C-z と使い分けるとよい。

シェルの履歴機能を使えるようにする方法がどこかのサイトに
書いてあったのを見たが忘れてしまった。

ESC !

でも外部コマンドの実行ができる。


◆◆ 変数の値の閲覧と設定 ◆◆


ESC x describe-variable ↓   tab-width ↓
ESC x set-variable ↓        tab-width ↓  4 ↓


◆◆ lisp 式, lisp ファイルの実行 ◆◆


式の実行

ESC :

ファイルの実行

ESC x load-file


◆◆ テキストファイルの 1 行の文字数を揃える ◆◆


既にテキストファイルの 1 行の文字数を揃えるには以下のように操作する。
例えば、1 行を 80 文字にして改行するには

  ESC 80
   C-x f

として fill-column という変数に 80 を設定した後、

 ESC g

を実行すると、C-SPC でマークした場所とカーソルの間のリージョンを
1 行 80 桁に揃える。

変数に値を設定するときは

  ESC x set-variable↓
 Set variable: fill-column↓
 Set fill-column to value: 80↓

とするのが一番基本的な方法である。


◆◆ キーボードマクロ ◆◆


C-x (    キーボードマクロの登録開始
C-x )    登録終了
C-x e    登録したマクロの実行

登録したマクロに名前をつける

(1) M-x name-last-kbd-macro      名前を付ける
(2) M-x macro-name               実行

キーに割り当てる

(1) M-x insert-kbd-macro        指定した名前のマクロの内容をカーソル位置に書き出す
(2) .emacs にコピーし、以下のように記述する

(fset 'my-macro
   "\C-aabc\C-a\C-n")
(global-set-key "\C-j\C-a" 'my-macro)

テンポラリに設定したい場合は

ESC :

で

(global-set-key "\C-j\C-a" 'my-macro)

を入れて実行する。


◆◆ タグの使い方 ◆◆


$ etags *.[hcfFx]   前後を検索するので関数がファイルを
                    超えて移動しない限り、再生成の必要はない

M-.  ( find-tag )  RET RET  タグ位置へジャンプ
C-u M-.                     次のタグ位置へジャンプ
ESC C-. ( find-tag-regrexp )


◆◆ カスタマイズ ◆◆


emacs ではキーのカスタマイズをはじめとして、様々なカスタマイズが可能である。
起動時に読み込む .emacs ファイルにカスタマイズする項目を書き込む。

カスタマイズについて ここ で述べる。
私の .emacs (漢字コードは EUC)


◆◆ lisp の使い方 ◆◆


変数の設定

   (setq 変数名 値)   値が数値のときはそのまま書き、
                      文字列の場合は " で括る。

条件分岐

   (if condition
       then-form
       else-forms)

   文は一つしか書けないので、progn と組み合わせる

   (if window-system
       (progn (set-background-color "navy")
              (set-forground-color  "white")
       )
   )

switch 文

   (cond
      (condition1 forms1)
      (condition2 forms2)
      ............
      (t forms)
   )


◆◆ narroing(ナローイング) ◆◆


編集できる範囲を限定する。余計な場所を変更しないで済む。

C-x n n    マークとカーソル位置までのみ表示
C-x n w    元に戻す