GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Imenu.html ・ emacs-doc.conao3.com

28.2.4 Imenu

Imenu機能を使えば、ファイル名からファイル内の主要な定義を検索できます。これは、定義が変数や関数などとなるプログラミング言語のメジャーモードと、各章や節などを定義として扱うテキストフォーマッタのメジャーモードの両方で有用です。(複数のファイルをまとめて処理できるより強力な機能については、識別子参照の検索を参照してください。)

M-g i (imenu) と入力すると、ミニバッファを使用して定義名を読み取り、ポイントをその定義に移動します。補完機能を使って名前を指定することもでき、このコマンドは補完バッファに一致する有効な名前の一覧を表示します。インデックスが階層構造になっている場合、デフォルトでは補完候補も階層構造に従ってネストされたリスト形式で表示されます。まずセクションを選択し、次にサブセクションを選択するといった手順で、最終的に定義名を選択します。ただし、imenu-flatten に nil 以外の値を設定すると、ネストされたメニューの代わりに、平坦化された定義リストから補完候補を選択できるようになります。平坦化された補完候補リストにおいてセクションやサブセクションがどのように表示されるかは imenu-flatten の値によって決まり、その値は以下のいずれかになります:

prefix

ここでは、各候補にセクション、サブセクション、サブサブセクションなどの名称が接頭辞として付されており、各レベルは imenu-level-separator の値(デフォルトでは ‘:’)という文字列で区切られています。

annotation

これは、各定義名に続いてセクション名を注釈として表示したものです。

group

セクションごとにグループ化された補完候補を表示しています。

あるいは、コマンド imenu をマウスクリックにバインドすることもできます。すると、定義名を選択するためのマウスメニューが表示されます。また、imenu-add-menubar-index を呼び出すことで、バッファのインデックスをメニューバーに追加することも可能です。特定のメジャーモードにおいて、すべてのバッファでこのメニューバー項目を利用可能にしたい場合は、そのモードフックに imenu-add-menubar-index を追加することで実現できます。ただし、そう設定した場合、そのモードでファイルを開くたびに、Emacs がそのバッファ内のすべての定義を検索するため、しばらく待つ必要があります。

バッファの内容を変更する際、定義の追加や削除を行った場合は、メニューの「*Rescan*」項目を呼び出すことで、新しい内容に基づいてバッファのインデックスを更新できます。imenu-auto-rescanにnil以外の値を設定すれば、再スキャンが自動的に行われます。テキストの軽微な変更によって再スキャンを行う必要はありません。

imenu-auto-rescan は、バイト数で imenu-auto-rescan-maxout を超えるバッファでは無効になり、スキャンに imenu-max-index-time 秒以上かかる場合は停止します。

変数 imenu-sort-function を設定することで、メニューのソート順をカスタマイズできます。デフォルトでは、名前はバッファに現れる順に並びます。アルファベット順にソートしたい場合は、値として記号 imenu--sort-by-name を指定してください。また、Lisp コードを記述することで、独自の比較関数を定義することも可能です。

また、変数 completion-category-overrides を変更し、カテゴリ imenu に対してその display-sort-function を設定することで、Imenu の補完結果のソート順をカスタマイズすることも可能です。

現在のバッファのプロジェクト(プロジェクトの操作を参照)および現在のバッファのメジャーモードに対してEglotが有効化されている場合、Eglotは、現在のバッファを管理する言語サーバーによるプログラムソースの解析に基づき、バッファのインデックスを生成するための独自の機能を提供します。Eglot: The Emacs LSP ClientのEglotの機能を参照してください。

Imenuは、Which Functionモードを案内するための情報を提供します(Which Functionモードを参照)。Speedbarでもこれを利用できます(Speedbarフレームを参照)。