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


28.2.4 Imenuとは

The Imenu facility offers a way to find the major definitions in a file by name. It is useful both in programming-language major modes, where the definitions are variables, functions, etc., and in text formatter major modes, where it treats each chapter, section, etc., as a definition. (See 識別子のリファレンスを探す, for a more powerful feature that handles multiple files together.)

If you type M-g i (imenu), it reads the name of a definition using the minibuffer, then moves point to that definition. You can use completion to specify the name; the command displays the list of matching valid names in the completions buffer. If the index is hierarchical, then by default the completion candidates are also shown hierarchically, as a nested list: first you need to choose a section, then a subsection, etc., and finally the name of the definition. However, if you set imenu-flatten to a non-nil value, then instead of the nested menu you can select a completion candidate from a flattened list of definitions. How the sections and subsections are shown in the flattened list of completion candidates depends on the value of imenu-flatten, which can be one of the following:

prefix

This shows each candidate prefixed by names of its section, subsection, subsubsection, etc., with each level separated from the next by the string that is the value of imenu-level-separator, by default ‘:’.

annotation

This shows the section names as annotations, following each definition name.

group

This shows the completion candidates grouped by their sections.

かわりに、コマンド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コードを記述することにより、独自の比較関数を定義することもできます。

You can also customize how Imenu completions are sorted by changing the variable completion-category-overrides and setting its display-sort-function for the category imenu.

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

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


Next: Which Functionモード, Previous: センテンスの移動, Up: トップレベルの定義、またはdefun   [Contents][Index]

This page has generated for branch:work/emacs-30_11e7ae3964e192b0e4bcc437a04278ee727e720b, commit:21d1f04ad721643c0229c9b6eb5285cb9fae6b99 to check Japanese translation.