Emacs の組み込み機能:高度な「バッテリー同梱」ガイド

強化されたナビゲーションとファイル操作

find-filedired におけるインタラクティブワイルドカード

ユーザーは find-file (C-x C-f) と dired でワイルドカードをインタラクティブに使用し、複数のファイルを開いたりディレクトリ一覧をフィルタリングしたりできます。例えば、find-file*foo*.txt のようなワイルドカードを使うと、該当するすべてのファイルが同時に開かれます。Dired では */*_region_* のようなワイルドカードでサブディレクトリ全体の特定ファイルのカスタム一覧を作成でき、まとめてマークして削除することが可能です。

バッファ全体のパス検出 ffap-menu

M-x ffap が現在のポイントにあるファイルを開くのに対し、M-x ffap-menu はバッファ全体を走査し、ファイルパスや URL のように見える文字列をすべて検出します。completing-read インターフェースを提供し、ユーザーは現在の文書内で見つかった任意のパスをフィルタリングして開くことができます。

辞書ツールチップ

M-x dictionary-tooltip-modetooltip-mode と併用)を有効にすると、マウスオーバー時にツールチップで単語の意味が表示されます。この機能はローカル辞書や Wiktionary を利用して、最新の専門用語や俗語を検索できます。

高度な差分比較ツール

compare-windows による軽量比較

M-x compare-windows はコンテキストに依存しないツールで、2 つのウィンドウのテキストをそれぞれのカーソル位置から比較します。最初に見つかった不一致で停止し、その内容を報告します。Ediff とは異なりテキストの出所を気にしないため、同一バッファ内の別々のセクションや、Dired でのディレクトリ内容やファイル属性の比較にも便利です。

Dired におけるディレクトリ比較

M-x dired-compare-directories は 2 つのディレクトリ間でファイル単位の比較を行います。名前が異なるファイルにマークを付けますが、ファイル属性に基づくカスタムマッチング述語もサポートしています。例えば、同名だがサイズが異なるファイルをマークする ((/= size1 size2)) や、最新の更新版をマークする ((> mtime2 mtime1)) ことが可能です。

リアルタイム変更ハイライト

M-x highlight-changes-mode はファイルへの変更を強調表示します。ベースモードは有効化した瞬間からの変更を追跡しますが、フックを使って未保存の変更のみをハイライトするよう自動化できます。

(defun highlight-changes-mode-turn-off ()
  (and highlight-changes-mode (highlight-changes-mode -1)))

(defun highlight-changes-auto ()
  (when (buffer-file-name)
    (highlight-changes-mode-turn-on)
    (add-hook 'after-save-hook #'highlight-changes-mode-turn-on nil t)
    (add-hook 'before-save-hook #'highlight-changes-mode-turn-off nil t)))

(add-hook 'text-mode-hook #'highlight-changes-auto)

専門的なテキスト操作と編集

現代的な複製コマンド

最近の Emacs バージョンでは、他のエディタで一般的な編集パターンを模したコマンドが追加されました:

  • copy-from-above-command: カーソル上の最初の空白でない行からテキストをコピーします。
  • duplicate-dwim: 現在の行またはアクティブな領域を現在位置の下にコピーします。

履歴からのマクロ作成

M-x kmacro-edit-lossage は、最近のキーストローク履歴(「ロサージ」)からキーボードマクロを作成できるようにします。これにより、ユーザーは一連の操作を記録し、後からそのシーケンスを繰り返し可能なマクロに変換できるため、いわゆる「先見の問題」を解決します。

単語構文のカスタマイズ

subword-mode は CamelCase シンボルの構成要素を個別の単語として扱い、superword-mode は snake_case シンボルを単一の単語として扱います。さらに、メジャーモードのシンタックステーブルを変更して文字の扱いを変えることができます。例えば、Lisp-data-mode でコロン (:) を単語の一部に設定し、backward-kill-word の動作を改善するには次のようにします:

(add-hook 'lisp-data-mode-hook
          (lambda () (modify-syntax-entry ?: "w")))

ウィンドウとフレームの管理

scroll-all-mode による同期スクロール

M-x scroll-all-mode は現在のフレーム内のすべてのウィンドウを同時にスクロールします。正式な Ediff セッションに入らずに、ファイルの 2 つのバージョンを横に並べて比較する際に特に便利です。

ruler-mode による視覚的余白制御

M-x ruler-mode はバッファの余白と fill-column を調整するための視覚的インターフェースを提供します。ユーザーは S-<mouse-1>S-<mouse-3> で左・右余白を設定し、<mouse-2> をドラッグして fill-column をリアルタイムに調整できます。

フレームの復元

M-x undelete-frame-mode を有効にすると、最近閉じたフレームを復元できるようになります。有効化後は M-x undelete-frame で最大 16 個までの削除されたフレームを復元でき、ワークスペースのレイアウトを保持します。

ユーティリティとヘルプシステム

apropos 系列

標準の apropos に加えて、Emacs には apropos-variableapropos-functioncustomize-apropos といった専門的な検索コマンドが含まれています。後者は検索語にマッチするすべてのオプションとフェイスを含むカスタマイズバッファを作成します。

直接ソースアクセス

M-x find-function-on-key を使うと、キー割り当てから直接そのキーが呼び出す関数のソースコードへジャンプでき、まずキーを調べてからソースへ移動する手間が省けます。

バッファロック

M-x emacs-lock-mode は、ロックが手動で解除されるまでバッファの削除や Emacs の終了を防ぎます。ファイルに紐付いていないバッファに重要な一時データがある場合の保護に便利です。

発見性と安定性に関するコミュニティの見解

これらの組み込み機能は強力ですが、Emacs コミュニティは「バニラ」体験とキュレーションされたディストリビューションのどちらが良いかで意見が分かれています。一部のユーザーは、発見性の問題が新規ユーザーにとって最大のハードルだと主張し、他のユーザーは安定性の方が重要だと指摘しています。

「Emacs のバッテリー機能に関する私の問題は、パッケージの組み合わせによる安定性です… 追加したどのパッケージでも、何らかのランダムで無関係に見えるパッケージを壊す可能性があります。」

「Emacs も Neovim も、RTFM(マニュアルを読む)とバニラ設定から自分のカスタム設定へと段階的に構築することを奨励します。これらのエディタ向けのディストリビューションスタイルのパッケージは、ユーザーがその初期の学習と発見を飛び越えてしまうことになります。」

Sources