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