Next: , Previous: , Up: トップレベルの定義、またはdefun   [Contents][Index]


27.2.3 Imenuとは

Imenu機能は、ファイル内の主要な定義を、名前で検索する方法を提供します。これはチャプター、セクションなどを扱う、テキストフォーマッターのためのメジャーモードでも有用です(複数ファイルを扱う、より強力な機能については、識別子のリファレンスを探すを参照してください)。

M-g i (imenu)とタイプすると、これはミニバッファーを使用して定義の名前を読み取りポイントをその定義に移動します。名前の指定に補完を使用できます。このコマンドは常に有効な名前の全体のリストを表示します。

かわりに、コマンドimenuをマウスクリックにバインドできます。そうすると定義名を選択するために、マウスメニューが表示されます。imenu-add-menubar-indexを呼び出して、バッファーのインデックスをメニューバーに追加することもできます。特定のメジャーモードのすべてのバッファーにたいして、このメニューバーアイテムを有効にしたい場合、モードフックにimenu-add-menubar-indexを追加して、これを行うことができます。しかし、それを行うことにより、そのモードでファイルをvisitするたびに、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コードを記述することにより、独自の比較関数を定義することもできます。

カレントバッファーのプロジェクト(プロジェクトで作業するを参照)とメジャーモードにたいしてEglotがアクティブであれば、Eglotはバッファーのインデックスを生成するための独自機能を提供します。これはカレントバッファーを管理している言語サーバー(language-server)によるプログラムのソース解析にもとづいた機能です。Eglot Features in Eglot: The Emacs LSP Clientを参照してください。

ImenuはWhich Functionモードに情報を提供します (Which Functionモードを参照してください)。 Speedbarもこれを使用します(スピードバーフレームを参照してください)。