本節のコマンドは、識別子自体、またはそれらを参照するファイルに対して、さまざまな検索・置換操作を行います。
pointにある識別子の参照をすべて特定してください。
*xref*バッファに表示されているすべての識別子名において、regexpをreplacementにインタラクティブに置換してください。
識別子 from のすべての出現箇所を、新しい名前 to にインタラクティブにリネームしてください。
選択したタグテーブル内のファイルから regexp を検索します。
選択したタグテーブル内の各ファイルに対してquery-replace-regexpを実行する。
現在のポイントから、上記の直近2つのコマンドのうちいずれかを再実行してください。
M-?
は、カーソル位置にある識別子のすべての参照箇所を特定し、必要に応じて識別子の入力を求め、補完を行います。現在のバックエンド(識別子の参照箇所の検索を参照)によっては、カーソル位置に有効な識別子が見つかった場合でも、このコマンドは入力を求めることがあります。プレフィックス引数を指定して呼び出した場合は、常に識別子の入力が求められます。(常に入力を求めるようにするには、変数
xref-prompt-for-identifier の値を t にカスタマイズするか、カーソル位置に使用可能な識別子がない場合にのみ入力を求めるように nil に設定してください。)その後、このコマンドは *xref*
バッファに、その識別子へのすべての参照を表示し、ファイル名と参照箇所の行番号を示します。このバッファでは Xref モードのコマンドが利用可能です。*xref*
バッファで利用可能なコマンドを参照してください。
メジャーモードに etags バックエンドを使用しているバッファ内で呼び出された場合、M-?
は元のバッファのメジャーモードと一致するファイルやバッファを検索します。ファイル拡張子からそのモードを推測するため、もし M-? が関連するバッファやファイルをスキップしているように見える場合は、変数 semantic-symref-filepattern-alist(バッファのメジャーモードに既にエントリがある場合)または
auto-mode-alist(ない場合)をカスタマイズして、不足している拡張子を xref に知らせてください(ファイルモードの選択 を参照)。
変数 xref-auto-jump-to-first-xref の値が t の場合、xref-find-references
は自動的に *xref*
バッファの最初の結果へジャンプし、その参照が表示されているウィンドウを選択します。他の結果は M-g M-n (next-error) および
M-g M-p (previous-error) で選択できます(コンパイルモード を参照)。値が show の場合、最初の結果が表示されますが、*xref*
バッファを表示しているウィンドウが選択されたままになります。値が move の場合、*xref* バッファの最初の結果が選択されますが、表示はされません。その後、RET を使用して実際に参照を表示できます。デフォルト値は nil で、これは *xref*
バッファの結果を表示するだけで、いずれの結果も選択せず、参照自体も表示しません。
r (xref-query-replace-in-results) は、通常の M-x query-replace-regexp と同様に replacement 文字列を読み込みます。その後、*xref*
バッファに表示されている識別子を、それらの識別子が参照されているすべてのファイルのすべての箇所において、新しい名前が replacement
となるようにリネームします。これは、リファクタリングの一環として識別子をリネームする場合に有用です。このコマンドは、M-? によって生成された *xref*
バッファ内で実行する必要があります。デフォルトでは、このコマンドは各識別子の名前全体を replacement
に置き換えますが、接頭辞引数を指定して実行した場合は、識別子名にマッチする正規表現の入力を求め、その正規表現にマッチした部分のみを識別子名の replacement に置き換えます。
M-x xref-find-references-and-replace は xref-query-replace-in-results
と同様に動作しますが、名前で指定した単一の識別子をリネームしたい場合 from にはより便利です。
*xref* バッファに e と入力すると、バッファが書き込み可能になり、Xref Edit モードに入ります。Occur Edit モード(その他の検索・ループコマンド を参照)と同様に、Xref バックエンドが報告した一致行を編集でき、その変更は元のファイルを参照しているバッファに反映されます。C-c C-c と入力すると、Xref Edit モードを終了し、Xref モードに戻ります。
M-x tags-search
はミニバッファを使用して正規表現を読み込み、選択されたタグテーブル内のすべてのファイルから、1ファイルずつ一致箇所を検索します。検索中のファイル名が表示されるため、進捗状況を確認できます。一致箇所が見つかるとすぐに、tags-search が戻ります。このコマンドを使用するには、タグテーブルが利用可能である必要があります(タグテーブルを参照してください)。
tags-search
で1件のマッチが見つかったため、おそらく残りのすべても探したいはずです。M-x
fileloop-continue は tags-search
を再開し、さらに1件のマッチを見つけます。これにより、現在のバッファの残りの部分と、続いてタグテーブルの残りのファイルが検索されます。
M-x tags-query-replace は、タグテーブル内のすべてのファイルに対して単一の
query-replace-regexp を実行します。通常の M-x query-replace-regexp
と同様に、検索用の正規表現と置換後の文字列を読み込みます。検索方法は M-x tags-search
とほぼ同様ですが、繰り返し実行され、入力に応じて一致箇所を処理します。クエリ置換の詳細については、Query Replace を参照してください。
変数 tags-case-fold-search
の値をカスタマイズすることで、タグ検索コマンドの大文字・小文字の区別を制御できます。デフォルトでは、case-fold-search の値と同じ設定が使用されます(検索時の緩いマッチングを参照)。
M-x tags-query-replace を一度呼び出すだけで、タグテーブル内のすべてのファイルを処理することが可能です。しかし、一時的に終了したい場面も多く、その場合は特別なクエリ置換の意味を持たない任意の入力イベントで終了できます。その後、M-x fileloop-continue と入力することでクエリ置換を再開できます。このコマンドは、直前に行ったタグの検索または置換コマンドを再開します。例えば、現在のファイルの残りの部分をスキップするには、M-> M-x fileloop-continue と入力します。
なお、上述のコマンドは、xref-find-definitions
系よりもはるかに広範な検索を行う点にご注意ください。xref-find-definitions
コマンドは、指定した文字列または正規表現に一致する識別子の定義のみを検索します。xref-find-references、tags-search、および tags-query-replace
コマンドは、現在のバッファにおける通常の検索コマンドや置換コマンドと同様に、識別子または正規表現のすべての出現箇所を検索します。
xref-find-references や tags-search の代替として、grep
をサブプロセスとして実行し、Emacs に一致する行を1行ずつ表示させることもできます。Emacs での Grep による検索 を参照してください。