2010-11-24 4 views
5

Gibt es eine Möglichkeit, Emacs Tags-Suchbefehl zu erhalten, um alle Suchergebnisse in einem Puffer zu sammeln? So wie die Ergebnisse von 'grep' und 'tags-apropos' in einem Kompilierungspuffer gesammelt werden?Gibt es eine Möglichkeit, Emacs-Tag-Suchbefehl zu erhalten, um alle Ergebnisse in einen Puffer auszugeben?

Verwenden Sie M-,, um über die Ergebnisse zu iterieren ist nicht sehr effektiv, wenn es eine große Anzahl von Treffern gibt, also wäre es toll, wenn es eine Möglichkeit zum Durchsuchen und Durchsuchen der Ergebnisse in einem Puffer gäbe.

Danke,

Benj

+0

Mögliche Duplikate von [Hilfe schreiben Emacs Lisp für Emacs Etags Suche] (http://StackOverflow.com/Questions/4474583/Help-writing-emacs-lisp-for-emacs-etags-Search), sehen Sie sich einige von die Lösungen dort. –

Antwort

4

Versuchen etags-select

+0

Ah das ist cool, wusste nicht darüber. "Tags-search" sucht jedoch in allen Dateien, die in Ihren geladenen Tag-Tabellen aufgelistet sind, nach einem regulären Ausdruck (im Gegensatz zur Suche nach Tags, was etags-select zu tun scheint).Ich könnte vielleicht etwas davon hacken. –

+0

Installieren Sie das 'etags-select'-Paket und Sie können die Funktionen 'Etags-Select-Find-Tag-at-Point' und' Etags-Select-Find-Tag' verwenden. – PlagueHammer

0

ich Ihre Frage in meiner ersten Antwort falsch interpretiert. Hier ist etwas, das funktioniert, aber es ist irgendwie schlecht, dass es synchrone Aufrufe von grep verwendet, so dass alles blockiert, während es funktioniert. Verbesserungen sind als Übung dem Leser überlassen:

(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 See. Damit können Sie alle in den Tag-Tabellen aufgelisteten Quelldateien nach Übereinstimmungen für einen bestimmten regulären Ausdruck durchsuchen.

Sie sehen alle Übereinstimmungen der Regexp in den Quellcodedateien, als Suchtreffer zu besuchen. Alle Tags in einer angegebenen Tag-Datei werden verwendet, einschließlich doppelter Tags aus derselben oder verschiedenen Quelldateien.

Standardmäßig werden alle Tag-Dateien verwendet. Wenn Sie jedoch ein Präfix als Argument angeben, wird nur die aktuelle Tag-Tabelle verwendet.

Suche nach Übereinstimmungen mit Abschluss, Zyklus und Suchtrefferersatz.

Nach dem regulären Ausdruck spezifiziert, die den Such Kontexten definiert, Typ Eingang (z.B. regexp oder ein anderes Muster) innerhalb die Kontexte entsprechen. Die Kontexte, die Ihrer Eingabe entsprechen, sind als Abschluss Kandidaten verfügbar. Sie können S-SPC verwenden, um die Kandidaten, weiter einzugrenzen, die zusätzliche Muster eingibt, um zusammenzupassen.

Standardmäßig sind die Kandidaten in der Reihenfolge des Puffervorkommens aufgeführt, aber Sie können auf verschiedene Arten sortieren, indem Sie C-, verwenden.

Sie können alternativ suchen wählen, nicht die Suchkontexte als durch den Kontext regexp definiert Sie bieten, aber die nicht-Kontexten, dass ist, wird der Text in den Dateien die nicht die übereinstimmt Regexp. Verwenden Sie hierzu während der Fertigstellung C-M-~. (Dies ist ein Toggle und betrifft nur zukünftige Suchbefehle , nicht die aktuellen.)

Weitere Informationen finden Sie im Dokument für den Befehl icicle-search.

+0

Wer: Erklären Sie, warum Sie diese Antwort abgelehnt haben? – Drew

Verwandte Themen