xrefで実現できる最も重要なことは、特定の識別子の定義を見つけ出すことです。
識別子 (xref-find-definitions) の定義を参照してください。
名前が pattern (xref-find-apropos) に一致するすべての識別子を検索します。
識別子の定義を検索し、別のウィンドウに表示する (xref-find-definitions-other-window)。
識別子の定義を検索し、新しいフレーム(xref-find-definitions-other-frame)に表示する。
マウスクリック時に識別子の定義を表示。
以前に M-. やその仲間たち (xref-go-back) を呼び出した箇所に戻ってください。
以前に M-, (xref-go-forward)
を呼び出した箇所まで進んでください。
xref を切り替えて etags
バックエンドを使用します。
M-. (xref-find-definitions)
は、現在位置にある識別子の定義を表示します。接頭辞引数が指定されている場合、または現在位置に識別子がない場合は、識別子の入力を求めます。(常に入力を求めるようにするには、xref-prompt-for-identifier を t
にカスタマイズしてください。)
M-. の識別子引数を入力する際は、通常のミニバッファ補完コマンド(Completion を参照)を使用でき、既知の識別子名が補完候補となります。
現在のXrefバックエンドを使用しており、設定されていない場合はエラーを通知し、いくつかの推奨事項を提示します。
バッファを切り替えるほとんどのコマンドと同様に、xref-find-definitions
には、新しいバッファを別のウィンドウに表示するバリエーション(display-buffer
の動作を参照)と、そのための新しいフレームを作成するバリエーションがあります。前者は C-x 4 . (xref-find-definitions-other-window)、後者は C-x 5 . (xref-find-definitions-other-frame) です。
コマンド xref-find-definitions-at-mouse は xref-find-definitions
と同様に動作しますが、マウスイベントが発生した箇所またはその周辺で識別子名を検索します。マイナーモード xref-mouse-mode は、このコマンドを C-mouse-1 にバインドします。
M-g .(または M-g
M-.)は、現在位置にある識別子に対して、特定の種類の定義をすべて検索します。まず、現在のバックエンドから返される利用可能なセットの中から、キー文字を用いて種類を選択するよう促します(識別子参照の検索を参照)。次に、現在位置にある識別子を使用するか、見つからない場合やコマンドがプレフィックス引数付きで呼び出された場合には、識別子の入力を求めます。(常に入力を求めるようにしたい場合は、xref-prompt-for-identifier
をカスタマイズしてください。)サポートされる種類の一覧はバックエンドに依存しており、バックエンドには記憶しやすいキーの使用と常識的な判断が推奨されています。例えば、Emacs
Lisp モードでは、種類として「variable」、「function alias」、「face」、「feature」(何らかのパッケージによって
provide されたシンボル)などがありますが、Eglot(組み込みの LSP
クライアント)では「declaration」、「implementation」、「type definition」が使用されます。
コマンド C-M-. (xref-find-apropos) は、タグに関しては apropos と同様の動作をします(Apropos を参照)。選択したタグテーブルの中から、指定した regexp に一致する名前の識別子の一覧を表示します。これは M-.
と同様ですが、シンボル名を固定文字列として照合するのではなく、識別子に対して正規表現マッチングを行う点が異なります。デフォルトでは、M-. と同様に *xref* バッファが表示されますが、変数
tags-apropos-additional-actions
をカスタマイズすることで追加の出力を表示できます。詳細はそのドキュメントを参照してください。
上記のコマンドのいずれかが複数の一致する定義を見つけた場合、デフォルトでは一致する候補を表示する*xref*バッファがポップアップ表示され、そのバッファのウィンドウが選択されます。(C-M-.は、少なくとも1つの一致が見つかった場合、常に*xref*バッファをポップアップ表示します。)通常、各候補はそのバッファにおいて、ファイル名と、そのファイル内の一致する識別子(複数可)として表示されます。そのバッファでは、いずれかの候補を選択して表示させることができ、さらに*xref*バッファで利用可能なコマンドで説明されているいくつかの追加コマンドが用意されています。ただし、変数xref-auto-jump-to-first-definitionの値がmoveの場合、Emacsは自動的にポイントを*xref*バッファ内のこれらの候補の先頭に移動させるため、単にRETと入力するだけでその候補の定義が表示されます。変数の値がtまたはshowの場合、最初の候補が自動的に専用のウィンドウで表示されます。tも最初の候補の定義を表示するウィンドウを選択しますが、showは*xfer*バッファのウィンドウを選択したままにします。デフォルト値はnilで、これは単に*xref*バッファに候補を表示しますが、*xref*バッファで候補を選択するまで、いずれの候補も選択せず、その定義も表示しません。
複数の候補が表示される*xref*バッファのウィンドウから切り替えた場合は、M-g M-n (next-error) および
M-g M-p (previous-error) コマンドを使用して、ある候補から別の候補へ移動できます。コンパイルモードを参照してください。
定義を表示した場所に戻るには、M-, (xref-go-back) を使用します。これにより、M-.
が最後に呼び出された時点まで戻ります。したがって、M-. で何らかの定義を探して調べ、その後 M-, で元の場所に戻ることができます。M-,
を使用すると、場所の履歴を遡って、最初に M-.
を呼び出した歴史上の最初の場所、あるいはその間の任意の場所まで戻ることができます。
以前に M-, で戻りすぎた場合や、戻った場所を再調査したい場合は、C-M-, (xref-go-forward)
を使用して再び進むことができます。これは M-.
を使用する場合と似ていますが、各ステップで定義を調べたい識別子にポイントを移動させる必要がない点が異なります。C-M-, を使用すると、場所の履歴において戻ったすべてのステップを、M-, を呼び出した履歴上の最後の場所、あるいはその間の任意の場所まで遡ることができます。
一部の主要なモードでは xref
のサポート機能が導入されていますが、特定の識別子が見つからない場合があります。例えば、Emacs Lisp モード(Emacs Lisp 式の評価 を参照)では、M-.
はデフォルトで、現在の Emacs セッションにロードされているか、あるいはオートロードされている Lisp
パッケージの関数と変数のみを検索します(The Emacs Lisp Reference
Manual の Autoload
を参照)。もし M-. で一部の識別子が見つからない場合は、xref に etags
バックエンドを強制的に使用させてみてください(識別子リファレンスの検索
を参照)。そのためには、M-x xref-etags-mode で Xref Etags
マイナーモードを有効にし、再度 M-. を呼び出してください。(この機能を動作させるには、必ず etags を実行してソースファイルのディレクトリツリーにタグテーブルを作成してください。タグテーブルの作成 を参照してください。)