すべての検索結果をバッファに収集する Emacs の tags-search コマンドを取得する方法はありますか? 「grep」と「tags-apropos」の結果がコンパイル バッファに収集される方法のようなものはありますか?
を使用M-,
して結果を反復処理しても、ヒット数が多い場合はあまり効果的ではないため、バッファー内の結果を参照して検索する方法があれば素晴らしいと思います。
ありがとう、
ベンジ
最初の回答であなたの質問を誤解しました。これは機能しますが、同期呼び出しを使用してgrepを実行するため、動作中にすべてがブロックされるという点で少し悪いです。改善点は、読者への演習として残します。
(require 'etags)
(require 'grep)
(defun tags-search-sel (regexp)
"Search through all files listed in tags table for match for REGEXP.
Show all matches at once."
(interactive "sTags search (regexp): ")
;; Get all unique filenames in TAGS files.
(let ((keep-going t) files)
(when (visit-tags-table-buffer)
(while keep-going
(save-excursion
(goto-char (point-min))
(while (re-search-forward "\f\n\\([^\n]+\\),[0-9]*\n" nil t)
(add-to-list 'files
(expand-file-name
(buffer-substring (match-beginning 1) (match-end 1))
(file-truename default-directory)))))
(setq keep-going (visit-tags-table-buffer t))))
;; grep through every file for regexp
(when files
(grep-compute-defaults)
(let ((outbuf (get-buffer-create "*tags-search-sel*")))
(with-current-buffer outbuf
(setq buffer-read-only nil)
(erase-buffer)
(insert "Searching for '" regexp "' in tags files ...\n\n")
(dolist (file files)
(call-process-shell-command (concat grep-command regexp " " file) nil t))
(grep-mode)
(setq overlay-arrow-position nil)
(set-buffer-modified-p nil)
(setq buffer-read-only t)
(goto-char (point-min)))
(pop-to-buffer outbuf)))))
を参照してくださいicicle-tags-search
。タグ テーブルにリストされているすべてのソース ファイルを検索して、特定の正規表現に一致するものを探すことができます。
訪問する検索ヒットとして、ソース コード ファイル内の正規表現のすべての一致が表示されます。同じまたは異なるソース ファイルからの重複タグを含め、特定のタグ ファイル内のすべてのタグが使用されます。
デフォルトでは、すべてのタグ ファイルが使用されますが、前置引数を指定すると、現在のタグ テーブルのみが使用されます。
補完、サイクリング、および検索ヒット置換を使用して、一致を検索します。
検索コンテキストを定義する正規表現を指定した後、入力 (regexp またはその他のパターンなど) を入力して、コンテキスト内で一致させます。入力に一致するコンテキストは、補完候補として使用できます。を使用S-SPC
して、一致する追加のパターンを入力して候補をさらに絞り込むことができます。
デフォルトでは候補はバッファの出現順ですが、 を使用してさまざまな方法で並べ替えることができますC-,
。
または、指定したコンテキスト正規表現で定義された検索コンテキストではなく、非コンテキスト、つまりregexp に一致しないファイル内のテキストを検索することもできます。これを行うには、C-M-~
完了時に使用します。(これはトグルであり、現在の検索コマンドではなく、将来の検索コマンドにのみ影響します。)
詳細については、コマンドのドキュメントを参照してicicle-search
ください。