実行時の環境

OS
macOS Ventura 13.4.1
Emacs
バージョン29.1

このコンテンツでは、Emacsの基本的な使い方や設定方法を紹介します。
Emacsを使ってみようと手をつけ始めても、最初はカーソルの移動1つですら「どうやるんだろう…」とググりながら進めることになるのはストレスとなってしまいます。(自分も最初挫折しそうになりました)

はじめは慣れなくても、慣れたらほとんどマウスを使うことなくテキスト編集作業ができるようになるのでぜひ馴染むまでゴリゴリいじってみてください。きっとあなたの人生における最高の相棒になることでしょう。

Emacsチートシート

自作Emacsチートシート
自作Emacsチートシート

Emacsの基本操作

まずは通常のテキストエディタとして扱えるようになることを目標にしましょう。なんだかんだで文字の入力や保存といった基本的なことさえできれば後は慣れでどうにかなります。

Emacsの各記号の意味

C-x C-s

このように書かれている場合、Ctrlキーを押しながらxを押し、そのままCtrlキーを押しながらsを押す、という意味です。Ctrlキーは左手の小指で押すことが一般的なため、Emacs使いは左手の小指が大切とされます。

M-x

このように書かれている場合は、Metaキー(Altキー)を押しながらx、という意味です。

S-r

このように書かれている場合は、Shiftキーを押しながらr、という意味です。

s-1

このように書かれている場合は、Superキー(Macだと)を押しながら1、という意味です。

M-<

このように通常の文字と同じく、Shiftを押しながら文字入力して組み合わせるパターンもあります。(この場合はMeta + Shift + ,を同時に押すことでM-<を表現します)

Emacsの起動と終了

以下、CLI(ターミナルなど)から操作。

コマンド説明
ターミナル
emacs
Emacsの起動(ファイル指定なし)
ターミナル
emacs &
WindowsのコマンドプロンプトでEmacsの起動(ファイル指定なし)
ターミナル
emacs [ファイルパス]
Emacsで指定ファイルを開く
ターミナル
emacs [ファイルパス] &
WindowsのコマンドプロンプトでEmacsで指定ファイルを開く
ターミナル
emacs -nw
ターミナル内でEmacsの起動(ファイル指定なし)
No windowの略
C-x C-cEmacsの終了

ファイル操作&バッファ操作

コマンド説明
C-x C-sカレントバッファの保存
C-x C-wファイルを別名で保存
C-x C-fファイルを開く
C-x i指定ファイルの内容を現在のカーソルの下に挿入

カーソル移動&検索

コマンド説明
C-fカーソルを右に一文字移動
M-fカーソルを右に一単語移動
C-bカーソルを左に一文字移動
M-bカーソルを左に一単語移動
C-pカーソルを上に移動
C-nカーソルを下に移動
C-aカーソルを行先頭に移動
C-eカーソルを行末に移動
M-<カーソルをファイル先頭に移動
M->カーソルをファイル末尾に移動
C-sカーソルより後に記述のある文字列を指定文字で検索し移動
C-rカーソルより前に記述のある文字列を指定文字で検索し移動
C-v一画面分、前に移動
M-v一画面分、後ろに移動

操作の取り消し&元に戻す(Undo)

コマンド説明
C-g操作の取り消し
C-x u元に戻す(Undo)
C-/元に戻す(Undo)

ウィンドウ操作

コマンド説明
C-x 0分割したウィンドウを一つに戻す(カーソルがないウィンドウが残る)
C-x 1分割したウィンドウを一つに戻す(カーソルがあるウィンドウが残る)
C-x 2ウィンドウを上下に分割
C-x 3ウィンドウを左右に分割
C-x +分割したウィンドウの幅と高さを均一にする
C-x b開いているバッファから現在のウィンドウに表示するものを指定する
C-x 5 2新規フレームを開く
C-x 5 oフレームを移動
C-x 5 0フレームを閉じる

文字の削除

コマンド説明
[Backspace]通常と同じくカーソルの一つ前の文字を削除
C-dカーソル位置の文字を削除
M-dカーソル位置から右側の一つの単語(M-fで移動する範囲)を削除
M-[Backspace]カーソル位置から左側の一つの単語(M-bで移動する範囲)を削除
C-kカーソル位置から行末まで削除
M-kカーソル位置から文末(まで)まで削除

範囲指定、カット、コピー&ペースト

コマンド説明
C-[Space]カーソル位置を範囲指定の始点にする
そこからカーソルを移動すると範囲指定できる
C-@C-[Space]と同じ
C-x hバッファ内すべて選択
C-w範囲指定している部分をカット(削除してクリップボードに保持)
M-w範囲指定している部分をコピー(削除せずクリップボードに保持)
C-yペースト(クリップボードに保持されている内容)

コマンド実行

コマンド説明
M-xプロンプトでコマンド名を入力する

Emacs基本設定

Emacsの設定はホームディレクトリ直下に作成される.emacs.dディレクトリで行います。
このディレクトリの中身を読み取ることによって、Emacsは独自にカスタマイズが可能となるため、Gitなどで管理しておくことが大切です。

また、.emacs.d/init.elは一番最初にEmacsの設定ファイルとしてロードされるため、ここに基本的な設定は盛り込みましょう。
独自にディレクトリ構造を作成可能なので、自分が管理しやすい方法を見つけるために積極的に設定ファイルをいじるようにしてください。

Emacs Lisp(通称elisp)というLispをベースにした独自の言語を利用しますが、最初のうちはコピペでも良いです。使い勝手が自分好みではないと思ったときにEmacs Lispを改めて学んでみようと思ったら、千葉大学理学部の松田茂樹准教授のEmacs Lispの入門サイトなどを参考に学んでみてください。

最初にするinit.elおすすめ設定

特定のディレクトリにパスを通す(例: .emacs.d/elispディレクトリ)
lisp
(defun add-to-load-path (&rest paths)
  (let (path)
    (dolist (path paths paths)
      (let ((default-directory (expand-file-name (concat user-emacs-directory path))))
        (add-to-list 'load-path default-directory)
        (if (fboundp 'normal-top-level-add-subdirs-to-load-path)
            (normal-top-level-add-subdirs-to-load-path))))))
(add-to-load-path "elisp")
melpaリポジトリでパッケージ管理する
lisp
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t)
(package-initialize)
スクラッチバッファのメッセージを消す
lisp
(setq initial-scratch-message "")
;; または
(setq initial-scratch-message nil)
自動保存ファイルを作らないようにする
lisp
(setq auto-save-default nil)
バックアップファイルを作らないようにする
lisp
(setq make-backup-files nil)
ロックファイルを作らないようにする
lisp
(setq create-lockfiles nil)
スタートアップ画面を表示しない
lisp
(setq inhibit-startup-message t)
C-fでファイルを開く際の開始ディレクトリを指定
lisp
(setq default-directory "~/")
(setq command-line-default-directory "~/")
ビープ音を消す
lisp
(setq ring-bell-function 'ignore)
デフォルトのタブ幅を4にする
lisp
(setq tab-width 4)
(setq default-tab-width 4)
行間のサイズを制御する
lisp
(setq-default line-spacing 0.15)
UTF-8で編集する
lisp
(prefer-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
メニューバーを消す
lisp
(menu-bar-mode -1)
ツールバーを消す
lisp
(tool-bar-mode -1)
スクロールバーを消す
lisp
(scroll-bar-mode 0)
(toggle-scroll-bar -1)
モードラインの時計を消す
lisp
;; つけたい場合は1
(display-time-mode 0)
モードラインに行と列を表示
lisp
(column-number-mode t)
全体で行番号を表示
lisp
(global-display-line-numbers-mode 1)
括弧の対をハイライト
lisp
(show-paren-mode t)
yes/noで回答するプロンプトをy/nでできるようにする
lisp
(fset 'yes-or-no-p 'y-or-n-p)
装飾のテーマを指定する
lisp
;; テーマ一覧 https://pawelbx.github.io/emacs-theme-gallery/
(load-theme 'deeper-blue t)
初期ウィンドウサイズをフルサイズにする
lisp
(add-to-list 'initial-frame-alist '(fullscreen . maximized))
(add-to-list 'default-frame-alist '(fullscreen . maximized))
フォントを指定する
lisp
(add-to-list 'default-frame-alist '(font . "Andale Mono-14"))

便利なキーボードショートカット

C-hでバックスペースできるようにする
lisp
(global-set-key (kbd "C-h") 'delete-backward-char)
別ウィンドウへ移動
lisp
(global-set-key (kbd "C-t") 'other-window)
現在日時を挿入する
lisp
(defun insert-datetime ()
  (interactive)
  (insert (format-time-string "%Y-%m-%d %02H:%02M:%02S")))
(global-set-key (kbd "s-4") 'insert-datetime)

便利なエイリアス

文字列の置換
lisp
;; M-xを押してrsでエイリアス
(defalias 'rs 'replace-string)
正規表現で置換
lis
;; M-xを押してrrでエイリアス
(defalias 'rr 'replace-regexp)
正規表現で文字揃え
lis
;; M-xを押してarpでエイリアス
(defalias 'arp 'align-regexp)
確認プロンプトなしでバッファを再読み込み
lis
(defun revert-buffer-no-confirm ()
  (interactive) (revert-buffer t t))
(global-auto-revert-mode 1)
(defalias 'rb 'revert-buffer-no-confirm)

おすすめパッケージ

実際の設定は別のコンテンツにしますが、実際に使っている便利なパッケージ一覧を紹介します。
※プログラミング言語補助系は抜いています。

ゴリゴリ設定していこう

ここまで、基本的なEmacsの使い方と設定方法を紹介してきました。紹介しておきながらアレですが、Emacsは自分で独自にカスタマイズしてなんぼです。

始めたての頃は、Emacsの設定をいじることで時間が溶けがちですが、それだけ愛着をもって一生物のエディタとして育てていける楽しみがあります。
キーボードの上で過ごす時間を快適に、自分の思い通りにしたい、と思っているエンジニアの人には本当に心からおすすめできるエディタです。

もしこれをきっかけにEmacsを使い始めたらとにかくゴリゴリに設定していきましょう。
きっとあなたのエンジニアライフがより一層素晴らしいものになるはずです。