Haskell勉強会

関数型プログラミングの学習日記

[改訂新版]Emacs実践入門

Emacsの使い方を学ぶために、Emacsの解説本を読んでみたいと思います。

 

 

 

目次

本書に寄せて

はじめに

改訂にあたって

本書の構成
 サンプルコードのダウンロード

Emacs Lispの構文

 

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

 1.1 多くの人に愛される歴史あるエディタ
  ユーザーが自由に機能を変更・追加できる
  使いこなせば強力な味方になる
  本当は難しくないEmacs

 

 1.2 本当のエディタにできること
  エディタが本来持つべき機能

 

 1.3 EmacsEmacsであるための特徴
  優れた操作性
  設定の柔軟性
  本体の拡張性

 

第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の違いによる分岐
  CLIGUIによる分岐
  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++JavaPHPなどのインデント

 

 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

gihyo.jp

 

サポートページ

https://gihyo.jp/book/2017/978-4-7741-9235-2/support

gihyo.jp

 

ダウンロード

本書の解説で利用しているinit.elのサンプルをダウンロードできます。圧縮ファイルをダウンロードしていただき,適宜解凍してご利用ください。

 

著者紹介

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

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

 

https://twitter.com/tomoyaton

twitter.com

 

書評

本書の「はじめに」に良いことが書いてあったのでメモ。

 

(p.vi)

 たしかに、最初から便利なIDEは学習コストも低く、プログラミングを始めるには良い選択肢だと思います。ですが、筆者はIDEでは学ぶことのできないことをEmacsから学びました。それがLispというプログラミング言語です。

 Lispは、1958年にJohn McCarthy氏によって考案されました。EmacsにはEmacs Lispという方言が拡張言語として採用されています。このLispに触れるまで、筆者はプログラミングが苦手でした。嫌いだったと言っても過言ではありません。それは、プログラミング言語に必ず存在する「関数」について正しく理解できていなかったためです。しかし、Emacs Lispに触ることで関数型言語を体験し、関数が何であるのかを理解できました。その結果、プログラミングへの苦手意識はきれいさっぱり消え去ってしまいました。

 このように、EmacsにはIDEやほかのエディタでは体験できない要素が詰まっています。Emacs Lispについては残念ながら本書では詳しく解説していませんが、興味のある方は「Lisp一夜漬け」を参考に触れてみるとよいかもしれません。

 

EmacsLispを学び、関数型言語の使い方に慣れて、プログラミングの苦手意識が解消されたと。

Lispの勉強道具としても、Emacsは役立ちますね。

 

http://www.haun.org/kent/lisp1/

www.haun.org

 

簡単なLisp講座が紹介されていました。

最初のつかみとして最適な難易度だと思います。

 

本書を読んで、Emacsの使い方に慣れたいと思います。

 

 

 

haskell.hatenablog.com