2. エディタ / Emacs

2.1. はじめに

実務においてはグラフィカルユーザインタフェースが使えない環境で作業をすることが多い. できるだけ,マウス操作に頼らず,キーボードのみでEmacsを使いこなせるようにしよう.

2.2. 覚えておきたいコマンド

凡例は教科書を熟読すること.以下は抜粋である.

  • C-*Ctrl キーを押しながら * を押す

  • M-*Alt キーを押しながら * を押す,または,ESC キーを押してから * を押す.

  • C-x 1Ctrl キーを押しながら x を押し,その後 2 を押す

  • SPC はスペースキー

2.2.1. 必須

  • C-g キャンセル

  • C-x C-c Emacsの終了

2.2.2. 全般

  • C-x C-f ファイルを開く(バッファにファイルを読み込む)

  • C-x C-s ファイルに保存する(バッファの内容をファイルに書き出す)

2.2.3. 文字列のコピー・カット・ペースト

  • C-SPC マーク(選択範囲の始端を指定する.終端はマーク後のカーソル位置.)

  • C-w カット(削除し,選択範囲の内容を内部バッファに書き写す)

  • M-w コピー(削除せずに,選択範囲の内容を内部バッファに書き写す)

  • C-y ペースト(内部バッファに保持した内容を,現在のカーソル位置から書き戻す)

なお,Emacsの用語としては,選択範囲=region,内部バッファ=kill ring,ペースト=yank,である. マークとはWindowsで言えば,Shift+カーソルキーで範囲選択をするときの,最初の操作のようなものである.

なお,関連して,マウスによる以下の操作と意味も覚えておくと捗るだろう.

  • マウスによる選択 ・・・ 「マーク」と「コピー」に相当

  • マウス中ボタンクリック・・・ 「ペースト」に相当

2.2.4. アンドゥ

  • C-\ アンドゥ(直前の作業を取り消す.)

  • リドゥはありません.

2.2.5. バッファ・ウィンドウ操作

バッファとは「ファイルを展開した中身そのもの」であり,ウィンドウとは「その覗き窓」である. ウィンドウを消してもバッファは消えないことに注意しよう.

バッファ操作

  • C-x b バッファの切り替え ※ C-x C-b だと切り替え先バッファをメニュー形式で選択できる.

  • C-x k バッファを消去する

ウィンドウ操作

  • C-x 0 アクティブなウィンドウを消す(バッファは残っている)

  • C-x 1 アクティブ以外のウィンドウを消す(バッファは残っている)

    • 例1:ヘルプなどで2画面になった時に,元のウィンドウの上で C-x 1 とすれば,元のウィンドウだけになる.

    • 例2:ヘルプなどで2画面になった時に,ヘルプウィンドウの上で C-x 0 とすれば,元のウィンドウだけになる.

  • C-x 2 ウィンドウを上下に分割する

  • C-x o 別のウィンドウをアクティブにする

2.2.6. 文字列の検索・置換

  • C-s カーソル位置から前方向に(インクリメンタル)検索

  • M-% (対話インタフェースによる)置換

  • M-x grep シェルのgrepコマンドと同様の検索.画面が分割され,新しい画面には一覧が表示される.

2.2.7. カーソルの移動

  • C-a 行頭に移動  ※シェルと同じコマンド

  • C-e 行末に移動  ※シェルと同じコマンド

  • M-g M-g 数字を入力して,指定行に移動

2.2.8. 文字コード・改行コード関連

  • C-x RET r または M-x revert-buffer-with-coding-system 文字コード・改行コードを指定して開き直す

    • 例: M-x revert-buffer-with-coding-system RET sjis-dos 文字コードShift_JIS,改行コード CRLF で開き直す

  • C-x RET f または M-x set-buffer-file-coding-system 現在開いているバッファを保存する際の文字コード・改行コードを指定する

    • 例: M-x set-buffer-file-coding-system RET utf-8-unix 文字コードUTF-8,改行コードLFで保存するようにする

  • 注意:

    • 文字化けの解決をするなら前者の revert-buffer... で開き直すこと.

    • 文字化けしたまま編集を行い,保存をした場合,文字化けした日本語はほぼ復活不可能となる.

    • 長いコマンドを打つのは大変.入力途中に TAB で補完しながら利用しよう.

2.3. C言語によるプログラミング

C-mode が有効になっていると,以下のようなコマンドが使える.

  • M-x compile コンパイルコマンドの呼び出し

    • Makefile を作っていない場合は,最初に入力されている make -k を消して,自分のコンパイルコマンドを入力し直す.

  • M-x gdb デバッガ起動(デバッガの使い方はGDBの記事を参照せよ)

Emacs環境でコンパイルする利点として,エラー行にジャンプできる,というものがある.

2.4. LaTeXによるレポート執筆

tex-mode が有効になっていると,表 1 のようなコマンドが使える.

表 1 LaTeX執筆時に利用できるコマンド

コマンド

意味

C-c C-f

タイプセット(PDFファイルの作成)

C-c C-k

タイプセットの中断

C-c C-v

プレビュー

C-c C-e

\end{...} の補完

ただし,日本語用のLaTeX (pLaTeX) を用いる場合は,Emcasの設定ファイルを修正する必要がある. 個人用の設定ファイルの書き換え例は次章「Emcasのカスタマイズ」を参照してほしい.

2.5. Emacsのカスタマイズ

便利に使うためのおススメ設定を紹介する. いずれも設定ファイルに記載する内容である.

2.5.1. 設定ファイル

Emacsの設定は以下のファイルに書く.無い場合は作成しよう.

  • ~/.emacs.d/init.el

Emacsの設定はLISP言語として書く.LISP言語のコメントは以下の2種類である. 最低でも ; だけ覚えておけば事足りるだろう.

リスト 4 行コメントの例
; This is comment.
(SOME-COMMAND SOME-ARGS)  ; This is comment.
リスト 5 ブロックコメントの例
#|
   This is comment.
   This is also comment.
|#

2.5.2. 推奨設定

最低でも,以下の設定ぐらいは書いておくと使いやすくなるだろう.なお,一部はすでに演習室のシステムとして設定済みである.

 1;
 2; EDU2019 - 基本設定
 3;
 4(prefer-coding-system 'utf-8-unix)  ; Unixの標準的なエンコーディングにする(文字コード UTF-8,改行コード LF)
 5(setq inhibit-startup-message t)    ; 初期メッセージを非表示にする
 6(display-time)                      ; 現在時刻の表示
 7;; 行番号の表示
 8(global-display-line-numbers-mode 1); 行番号表示モード On
 9(setq linum-format "%3d ")          ; 数字のフォーマット(cf. printf)
10;; 対応する括弧の強調表示
11(show-paren-mode t)                 ; 括弧の強調表示モード On
12(setq show-paren-style 'mixed)      ; 強調表示モードの選択
13;; インデントの基本設定
14(setq-default
15   c-basic-offset 4
16   tab-width 4
17   indent-tabs-mode nil)
18;; C言語のためのスタイル設定(標準のgnuはやや使いづらい)
19(setq-default c-default-style "linux")

2.5.3. LaTeX執筆用の追加設定

1; EDU2019 - LaTeX用 設定
2(setq tex-default-mode 'latex-mode)
3(setq latex-run-command "ptex2pdf -l -u -ot \"-synctex=1 -interaction=nonstopmode\"")
4(setq tex-print-file-extension ".pdf")
5(setq tex-dvi-view-command "evince")
6(setq tex-dvi-print-command "evince")

なお,これらは演習室の環境で用いる場合の設定例である. 自習用に設定する場合は,各自の環境に合わせて変更する必要がある場合がある.

2.6. FAQ

►Q. emacs xxxx.c などとして,ファイルを直接編集しようとすると,図 2 のように画面下半分を初期起動画面が占めている.今後表示させたくないのだが,どうすればよいか?

A. 初期起動画面をよく見ると,下方に記載されている.以下の通り:

  1. 「□ Never show it again」のチェックボックスにチェックを入れて,

  2. 「Dismiss this startup screen」をクリックする.

../_images/emacs_inhibit_start_screen.png

図 2 Emacsの画面例と初期画面の消し方


►Q. Emacsをターミナルの中で実行した時,上にメニューっぽいものがあるが,どうやって使えばよいのか?

A. F10 を押せば,分割されたウィンドウ内でメニュー選択ができるようになる.キャンセルは C-g である.


2.7. 参考URL

2.8. 参考書