WEB+DB PRESS plusシリーズ[改訂新版]Emacs実践入門
――思考を直感的にコード化し,開発を加速する

書籍の概要

この本の概要

2012年に刊行された『Emacs実践入門』の改訂版です。初版の発行から5年が経過し,Emacsにはさまざまな進化がありました。本書ではそれらに対応するべく,解説の全面見直しを行いました。Emacsの最新バーションに対応するほか,現在の開発現場で使われている拡張機能にも変化が現れているので,新登場した拡張機能に対する解説の追加も行っています。そのほかの部分も解説を見直し,適宜加筆/修正を行っています。

こんな方におすすめ

  • これからEmacsを使いたいと考えている方
  • さらにEmacsを使いこなしたいと考えている方

本書に関するお知らせ

本書に関連する記事を公開しております。

この書籍に関連する記事があります!

エンジニアに愛され続ける定番エディタ
Emacsというエディタが誕生したのは1975年です。

目次

  • 本書に寄せて
  • はじめに
  • 改訂にあたって
  • 本書の構成
    • サンプルコードのダウンロード
  • Emacs Lispの構文

第1章:Emacsの世界へようこそ

1.1 多くの人に愛される歴史あるエディタ

  • ユーザーが自由に機能を変更・追加できる
  • 使いこなせば強力な味方になる
  • 本当は難しくないEmacs

1.2 本当のエディタにできること

  • エディタが本来持つべき機能

1.3 EmacsがEmacsであるための特徴

  • 優れた操作性
  • 設定の柔軟性
  • 本体の拡張性

第2章:インストール,設定ファイルと画面の構成

2.1 インストール

  • Macへのインストール
    • Emacs.appを入手する
    • Emacs.appを自分でビルドする
  • Windowsへのインストール
    • オフィシャルビルドを利用する
  • Linuxへのインストール
  • ターミナル環境へのインストール

2.2 ディレクトリと設定ファイルの構成

  • 各ディレクトリの役割
    • etcディレクトリ
    • leimディレクトリ
    • lispディレクトリ
    • site-lispディレクトリ
    • binディレクトリ
    • ホームディレクトリに作成される.emacs.dディレクトリ
  • Windowsのホームディレクトリ設定
  • 設定ファイルの構成

2.3 画面の構成

  • フレーム
  • ウィンドウ
  • フリンジ
  • バッファ
  • [column] Emacsは終了しない?
  • モードライン
  • ミニバッファ(エコーエリア)

2.4 モード

  • メジャーモード
    • メジャーモードを選択するしくみ
    • メジャーモードが提供する機能
  • マイナーモード
    • マイナーモードが提供する機能
  • [column] アラインメント機能を使ってきれいなコードを書く

第3章:基本的な操作

3.1 コマンド

  • 入力して実行する
  • キーバインドから実行する
    • コマンドの表記方法
    • キーバインドの表記方法
    • キーバインドの表記サンプル
    • プレフィックスキー(起点キー)

3.2 起動と終了

  • 起動する
    • Emacsデーモンで起動を高速化する
  • [column] 困ったときはC-gでキャンセル
    • デバッグモードでの起動
  • 終了する

3.3 ファイル(バッファ)を開く,保存する

  • ファイル(バッファ)を開く──C-x C-f
  • ファイル(バッファ)を保存する──C-x C-s
  • すべてのファイル(バッファ)を保存する──C-x s
  • バックアップファイル
    • オートセーブファイル
  • 別名で保存する──C-x C-w
  • バッファに別ファイルを挿入する──C-x i
  • 文字コード・改行コードを変換する──C-x RET f
  • 文字コード・改行コードを変換して開き直す──C-x RET r
  • バッファを切り替える──C-x b
  • バッファを消去する──C-x k

3.4 カーソル移動

  • キーバインド一覧
  • Emacsのホームポジション

3.5 文字の入力や文字列の操作

  • マークとリージョン──C-SPC
  • コピーとカット──M-w,C-w
  • 行を消去する──C-k
  • ペーストする──C-y,C-y M-y……
  • コメントする,コメントを解除する──M-;
  • 特殊文字を入力する──C-q
  • アンドゥ──C-/,C-_,C-x u
  • [column] ちょっと便利なリージョン選択方法

3.6 Emacsの正規表現

  • 特別な文字

3.7 検索と置換

  • grepによる検索
  • インクリメンタル検索──C-s,C-r,C-M-s,C-M-r
  • 対話置換,一括置換──M-%,C-M-%
    • ナローイングでバッファの一部のみを編集する

3.8 ウィンドウ操作

  • ウィンドウを分割する──C-x 2,C-x 3
  • ウィンドウを移動する──C-x o
  • 分割したウィンドウを閉じる──C-x 1,C-x 0

3.9 ディレクトリ操作(Dired)

  • ファイル名の一括変更──wdired-change-to-wdired-mode

3.10 キーボードマクロによる繰り返し操作

  • 基本的な使い方
  • 名前を付ける
  • 再利用するために保存する

3.11 表示の変更

  • 文字サイズをすぐに変更する──C-x C-+,C-x C-=,C-x C--,C-x C-0
  • 行の折り返し表示を変更する──M-x toggle-truncate-lines

3.12 ヘルプの利用

  • info──M-x info
  • ヘルプコマンド──C-h,
  • よく利用するヘルプコマンド
    • C-h a 文字列 RET
    • C-h b
    • C-h k キーバインド
    • C-h w コマンド名 RET
    • C-h f 関数名 RET
    • C-h v 変数名 RET
  • 日本語ドキュメント

第4章:設定ファイルの管理方法

4.1 効率的な設定ファイルの作り方と管理方法

  • ~/.emacs.dディレクトリに設定をまとめて管理
    • サブディレクトリの構成
    • Elispをどのように配置すべきか
    • Elisp配置用のディレクトリを作成する
    • ロードパスを追加する
    • 設定を反映するには
  • 設定を分割して管理
    • ファイルを分ける
    • init-loader.elを利用する

4.2 環境に応じた設定の分岐

  • OSの違いによる分岐
  • CLIとGUIによる分岐
  • Emacsのバージョンによる分岐

4.3 拡張機能の読み込み方

  • requireとautoloadの違い
    • require
    • autoload
  • コマンドがある場合のみ読み込む

4.4 Webサービスを用いたバックアップ

  • GitHub
    • ~/projects/dotfilesディレクトリに設定ファイルを移動する
    • シンボリックリンクを利用する
    • Gitにコミットする
    • GitHubへプッシュする
  • Dropbox
  • [column] エディタ採用
    • 自分が使う道具を厳選して選んで手入れをしている

第5章:本体の設定

5.1 設定を反映する方法

  • C-x C-eとC-jによる評価
  • その他の評価

5.2 キーバインドの設定

  • キーマップ
    • キーバインドの優先順位
  • キーバインドの割り当て
  • お勧めのキー操作
    • 改行と同時にインデントする
  • [column] C-hをバックスペースにする
    • 行の折り返し表示を切り替える
    • 簡単にウィンドウを切り替える

5.3 環境変数の設定

  • パスの設定
  • 文字コードの設定
    • 現在の文字コード設定を調べる
    • 文字コードを指定する

5.4 フレームに関する設定

  • モードラインに関する設定
    • 行番号/カラム番号を表示する
    • ファイルサイズ,時計,バッテリー残量を表示する
  • タイトルバーにファイルのフルパスを表示
  • ウィンドウ左に行番号を表示

5.5 インデントの設定

  • タブ文字の表示幅
  • タブ文字の利用
  • C,C++,Java,PHPなどのインデント

5.6 表示・装飾に関する設定

  • フェイス
  • フォントの設定
    • 英語フォントを指定する
    • 日本語フォントを指定する
    • フォントの横幅を調節する

5.7 ハイライトの設定

  • 現在行のハイライト
  • 対応する括弧のハイライト

5.8 バックアップとオートセーブ

  • オートセーブファイルからの復元
  • バックアップとオートセーブの設定
    • バックアップとオートセーブファイルの作成先を変更する
    • オートセーブの間隔を変更する

5.9 変更されたファイルの自動更新

  • ファイルの自動更新

5.10 フック

  • 自動化のしくみ
  • 利用方法
    • 無名関数lambdaを使う場合
    • 関数を定義する場合
  • 代表的なフック一覧
  • [column] 簡単な計算は*scratch*バッファで

第6章:テキスト編集をさらに効率化する拡張機能

6.1 Elispをインストールしよう

  • インストール方法の種類
    • package.el
    • 手動インストール
  • 手動インストール
    • Elispを配置する
    • バイトコンパイルする
    • byte-compile-fileコマンド
    • シェルからバイトコンパイルする
  • package.elによるインストール
    • ELPAリポジトリを追加する
    • パッケージ一覧を取得する
    • パッケージ一覧から選択してインストールする
    • コマンドから直接インストールする
    • ファイルやバッファからインストールする
    • インストール先のディレクトリ構成と設定のしくみ
  • [column] 拡張機能の設定方法を調べるには

6.2 テーマ

  • テーマの変更──load-theme
    • インストールする
    • テーマ選択を保存する
  • [column] Spacemacs

6.3 統一したインタフェースでの操作

  • 候補選択型インタフェース──Helm
    • インストールする
    • 利用可能にする
    • ファイルを開く・バッファを切り替える
    • キーバインドを一覧表示する──helm-descbinds
    • 過去の履歴からペーストする──helm-show-kill-ring
    • moccurを利用する──helm-c-moccur

6.4 入力の効率化

  • 補完入力の強化──Auto Complete Mode
    • インストールする
    • 利用可能にする
    • 補完候補をポップアップ&絞り込む

6.5 検索と置換の拡張

  • 検索結果のリストアップ──color-moccur
    • インストールする
    • 利用可能にする
    • 代表的なコマンド
    • マルチバッファを検索し結果をリストアップする
    • カレントバッファを検索し結果をリストアップする
  • moccurの結果を直接編集──moccur-edit
    • インストールする
    • 利用可能にする
    • moccurの結果を編集する
    • 編集を終了したときにファイルを自動保存する
  • grepの結果を直接編集──wgrep
    • インストールする
    • 利用可能にする
    • grepの結果を編集する

6.6 さまざまな履歴管理

  • 編集履歴の記憶──undohist
    • インストールする
    • 利用可能にする
    • ファイルを閉じたあとにアンドゥする
  • アンドゥの分岐履歴──undo-tree
    • インストールする
    • 利用可能にする
    • 樹形図を見ながらアンドゥする
  • カーソルの移動履歴──point-undo
    • インストールする
    • 利用可能にする
    • カーソル位置を戻す/やりなおす

6.7 ウィンドウ管理

  • 分割状態を管理──ElScreen
    • インストールする
    • 利用可能にする
    • スクリーンを作成する
    • スクリーンを移動する
    • 代表的なキーバインド

6.8 メモ・情報整理

  • メモ書き・ToDo管理──howm
    • インストールする
    • 利用可能にする
    • howm-menuを起動する
    • メモを書く
    • 保存と同時に閉じる
  • アウトラインエディタ──org-mode
    • アウトライン編集機能
    • 表を入力する

6.9 特殊な範囲の編集

  • 矩形編集──cua-mode
    • 利用可能にする
    • 各行頭に文字を追加する
    • 各行頭の文字を削除する
    • 連番を入力する
  • [column] 便利な行操作コマンド

第7章:開発をさらに効率化する拡張機能

7.1 各種言語の開発環境

  • Web開発
    • web-mode
    • web-modeの基本設定
  • HTML
    • html-mode
    • html-modeを利用してタグを入力する
    • html-modeが自動選択されるしくみ
    • nxml-mode
    • nxml-modeをHTML編集のデフォルトモードに
    • nxml-modeで構文チェックする
    • HTML5をnxml-modeで編集する
    • nxml-modeの基本設定
  • CSS
    • less-css-mode
    • sass-mode
  • JavaScript
    • 標準のjs-mode
    • 構文チェック機能を備えたjs2-mode
    • js2-modeをインストールする
  • PHP
    • php-mode
    • オンラインドキュメントを利用する
    • php-modeのインデントを調整する
  • Perl
    • cperl-mode
  • [column] 便利なエイリアス
    • cperl-modeのインデントを調整する
    • yaml-mode
  • Ruby
    • ruby-modeのインデントを調整する
    • Ruby編集用の便利なマイナーモードを利用する
    • Emacsからirbを利用する──inf-ruby
  • Python
    • python-mode
    • 構文をチェックする
  • C/C++
    • cc-mode
    • cc-mode付属のマイナーモード
    • c-mode-common-hookとそれぞれのフック

7.2 Flycheckによる文法チェック

  • Flymakeとの違い
  • Flycheckを利用できる言語
  • Flycheckの利用
    • インストールする
    • 文法チェックを実行する
    • 機能を追加する

7.3 コードの実行

  • quickrunによるコード実行
    • インストールする
    • コードを実行する

7.4 タグによるコードリーディング

  • Etags以外のタグ作成プログラム
  • gtagsとEmacsの連携
    • gtags.elをインストールする
    • gtags-modeの使い方
    • Helmとgtagsの連携

7.5 プロジェクトベースの編集──projectile

  • projectileによるプロジェクト管理
    • インストールする
    • projectileを利用する
    • Helmを使って利用する
    • Railsサポートを利用して編集するファイルを切り替える

7.6 特殊な文字の入力補助

  • 絵文字の入力補助──ac-emoji
    • インストールする
    • 絵文字を入力する

7.7 差分とマージ

  • diffによる差分表示──M-x diff
  • Ediffによる差分表示──M-x ediff
    • ファイルを比較する
    • 同一フレーム内にコントロールパネルを表示する
    • キーバインド一覧
  • Ediffによるパッチの適用──M-x epatch
  • Ediffによるマージ──M-x ediff-merge

7.8 Emacsからデータベースを操作

  • データベースへの接続
    • MySQLへ接続する──sql-interactive-mode
  • sql-modeとの連携

7.9 バージョン管理

  • Emacs標準のバージョン管理機能
  • Subversionフロントエンド──psvn
    • インストールする
    • 操作する
  • Gitフロントエンド──Magit
    • インストールする
    • 操作する
    • コミットする
  • 差分の表示──git-gutter
    • インストールする
    • 差分を視覚的に表示する

7.10 シェルの利用

  • シェルコマンドの実行──M-!
    • カレントファイルへ結果を出力する──C-u M-!
    • バッファの内容を標準入力として利用する──M-¦
  • ターミナルの利用──multi-term
    • インストールする
    • ターミナルを起動する

7.11 TRAMPによるサーバ接続

  • sudo,suによる編集
  • バックアップファイルを作成しない

7.12 ドキュメント閲覧・検索

  • Emacs版manビューア(WoMan)の利用
    • 利用可能にする
  • Helmによるman検索

7.13 テスティングフレームワークとの連携

  • phpunit.el
    • インストールする
    • テストを実行する
  • rspec-mode
    • インストールする
    • テストを実行する
  • [column] Elispのライセンス

Appendix:最新情報を入手するには

A.1 開発状況

  • フリーソフトウェアとしてのEmacs
  • ソースコードリポジトリ
    • Gitを利用してソースコードを取得する

A.2 開発版の試用

  • 開発版のビルド
    • READMEを読む
    • configureファイルを作成する

A.3 新しい情報に触れるには

  • メーリングリスト
  • EmacsWiki──世界のEmacsコミュニティ
  • メーリングリスト,Wiki,その先へ
  • [column] 設定をシンプルにするuse-package
  • [column] Google Mapsも使えるEmacs

著者プロフィール

大竹智也(おおたけともや)

1983年生まれ。起業家,及びフロントエンドからバックエンドまで幅広くカバーするWebエンジニア。兵庫県立明石高等学校卒業後,フリーターとして働きながら独学でWeb技術を習得する。2010年にオンライン英会話「ラングリッチ」を起業。2015年に「EnglishCentral」への売却を果たす。著書に本書のほかに『Atom実践入門』があり,エディタ本による三冠王を目指している。