2010-11-24 54 views
5

有沒有辦法讓Emacs tags-search命令收集緩衝區中的所有搜索結果?類似於'grep'和'tags-apropos'結果的方式會被收集到編譯緩衝區中嗎?有沒有辦法讓emacs tag-search命令將所有結果輸出到緩衝區?

如果存在大量命中,則使用M-,來遍歷結果並不是非常有效,所以如果有一種方法可以瀏覽並搜索緩衝區中的結果,那將非常有用。

感謝,

BENJ

+0

可能的重複[幫助寫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

回答

4

嘗試etags-select

+0

啊,這很酷,不知道這一點。然而,`tags-search`在加載的標籤表中列出的所有文件中搜索正則表達式(與搜索標籤相反,這正是etags-select所做的)。儘管如此,我也許可以從中篡改一些東西。 – 2010-11-24 02:20:25

+0

安裝`etags-select`軟件包,你可以使用`etags-select-tag-at-point`和`etags-select-find-tag`功能 – PlagueHammer 2017-01-14 01:26:45

0

我誤解你的問題在我的第一個答案。這是有用的東西,但有點不好,因爲它使用同步調用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))))) 
0

請參閱icicle-tags-search。它允許您搜索標籤表中列出的所有源文件,以查找給定正則表達式的匹配項。

您可以看到源代碼文件中正則表達式的所有匹配項,作爲要訪問的搜索匹配項。使用給定標籤文件中的所有標籤,包括來自相同或不同源文件的重複標籤。

默認情況下,將使用所有標籤文件,但如果您提供前綴 參數,則僅使用當前標籤表。

搜索匹配,完成,騎自行車和搜索命中替換。

指定定義搜索上下文的正則表達式,類型 輸入(例如正則表達式或其他圖案)來匹配上下文之後。 與您的輸入相匹配的上下文可作爲完成 候選。您可以使用S-SPC進一步縮小候選人, 鍵入其他模式以匹配。

默認情況下,候選者按照緩衝區的順序排列,但您可以使用C-,以各種方式對它們進行排序。

您也可以選擇搜索,而不是搜索上下文爲 上下文正則表達式您提供的定義,但非上下文,即 是,在不匹配的文件文本正則表達式。爲此, 在完成期間使用C-M-~。 (這是一個切換,它僅影響未來的搜索命令,而不是當前的搜索命令。)

有關更多信息,請參閱文檔以獲取命令icicle-search

相關問題