[改訂新版]Emacs実践入門
Emacsの使い方を学ぶために、Emacsの解説本を読んでみたいと思います。
目次
本書に寄せて
はじめに
改訂にあたって
本書の構成
サンプルコードのダウンロード
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.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
索引
著者紹介
出版社情報
書籍紹介
https://gihyo.jp/book/2017/978-4-7741-9235-2
サポートページ
https://gihyo.jp/book/2017/978-4-7741-9235-2/support
ダウンロード
本書の解説で利用しているinit.elのサンプルをダウンロードできます。圧縮ファイルをダウンロードしていただき,適宜解凍してご利用ください。
著者紹介
大竹智也(おおたけともや)
1983年生まれ。起業家,及びフロントエンドからバックエンドまで幅広くカバーするWebエンジニア。兵庫県立明石高等学校卒業後,フリーターとして働きながら独学でWeb技術を習得する。2010年にオンライン英会話「ラングリッチ」を起業。2015年に「EnglishCentral」への売却を果たす。著書に本書のほかに『Atom実践入門』があり,エディタ本による三冠王を目指している。
書評
本書の「はじめに」に良いことが書いてあったのでメモ。
(p.vi)
たしかに、最初から便利なIDEは学習コストも低く、プログラミングを始めるには良い選択肢だと思います。ですが、筆者はIDEでは学ぶことのできないことをEmacsから学びました。それがLispというプログラミング言語です。
Lispは、1958年にJohn McCarthy氏によって考案されました。EmacsにはEmacs Lispという方言が拡張言語として採用されています。このLispに触れるまで、筆者はプログラミングが苦手でした。嫌いだったと言っても過言ではありません。それは、プログラミング言語に必ず存在する「関数」について正しく理解できていなかったためです。しかし、Emacs Lispに触ることで関数型言語を体験し、関数が何であるのかを理解できました。その結果、プログラミングへの苦手意識はきれいさっぱり消え去ってしまいました。
このように、EmacsにはIDEやほかのエディタでは体験できない要素が詰まっています。Emacs Lispについては残念ながら本書では詳しく解説していませんが、興味のある方は「Lisp一夜漬け」を参考に触れてみるとよいかもしれません。
EmacsでLispを学び、関数型言語の使い方に慣れて、プログラミングの苦手意識が解消されたと。
http://www.haun.org/kent/lisp1/
簡単なLisp講座が紹介されていました。
最初のつかみとして最適な難易度だと思います。
本書を読んで、Emacsの使い方に慣れたいと思います。