有沒有辦法讓Emacs tags-search命令收集緩衝區中的所有搜索結果?類似於'grep'和'tags-apropos'結果的方式會被收集到編譯緩衝區中嗎?有沒有辦法讓emacs tag-search命令將所有結果輸出到緩衝區?
如果存在大量命中,則使用M-,
來遍歷結果並不是非常有效,所以如果有一種方法可以瀏覽並搜索緩衝區中的結果,那將非常有用。
感謝,
BENJ
有沒有辦法讓Emacs tags-search命令收集緩衝區中的所有搜索結果?類似於'grep'和'tags-apropos'結果的方式會被收集到編譯緩衝區中嗎?有沒有辦法讓emacs tag-search命令將所有結果輸出到緩衝區?
如果存在大量命中,則使用M-,
來遍歷結果並不是非常有效,所以如果有一種方法可以瀏覽並搜索緩衝區中的結果,那將非常有用。
感謝,
BENJ
啊,這很酷,不知道這一點。然而,`tags-search`在加載的標籤表中列出的所有文件中搜索正則表達式(與搜索標籤相反,這正是etags-select所做的)。儘管如此,我也許可以從中篡改一些東西。 – 2010-11-24 02:20:25
安裝`etags-select`軟件包,你可以使用`etags-select-tag-at-point`和`etags-select-find-tag`功能 – PlagueHammer 2017-01-14 01:26:45
我誤解你的問題在我的第一個答案。這是有用的東西,但有點不好,因爲它使用同步調用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
。它允許您搜索標籤表中列出的所有源文件,以查找給定正則表達式的匹配項。
您可以看到源代碼文件中正則表達式的所有匹配項,作爲要訪問的搜索匹配項。使用給定標籤文件中的所有標籤,包括來自相同或不同源文件的重複標籤。
默認情況下,將使用所有標籤文件,但如果您提供前綴 參數,則僅使用當前標籤表。
搜索匹配,完成,騎自行車和搜索命中替換。
指定定義搜索上下文的正則表達式,類型 輸入(例如正則表達式或其他圖案)來匹配內上下文之後。 與您的輸入相匹配的上下文可作爲完成 候選。您可以使用S-SPC
進一步縮小候選人, 鍵入其他模式以匹配。
默認情況下,候選者按照緩衝區的順序排列,但您可以使用C-,
以各種方式對它們進行排序。
您也可以選擇搜索,而不是搜索上下文爲 上下文正則表達式您提供的定義,但非上下文,即 是,在不不匹配的文件文本正則表達式。爲此, 在完成期間使用C-M-~
。 (這是一個切換,它僅影響未來的搜索命令,而不是當前的搜索命令。)
有關更多信息,請參閱文檔以獲取命令icicle-search
。
可能的重複[幫助寫emacs lisp for emacs etags search](http://stackoverflow.com/questions/4474583/help-writing-emacs-lisp-for-emacs-etags-search),查看一些那裏的解決方案。 – 2010-12-18 20:04:53