2010-11-24 4 views
5

Есть ли способ получить команду тегов Emacs-search для сбора всех результатов поиска в буфере? Что-то вроде того, как результаты «grep» и «tags-apropos» собираются в буфере компиляции?Есть ли способ получить команду emacs tag-search для вывода всех результатов в буфер?

Использование M-, для повторения результатов не очень эффективно, если есть большое количество обращений, так что было бы здорово, если бы был способ поиска и поиска результатов в буфере.

Спасибо,

Benj

+0

Возможный дубликат [Помощь при написании emacs lisp для поиска emacs etags] (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-find-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-,.

Вы можете альтернативно выбрать для поиска, а не поиск контексты как определяется контекстом регулярного выражения вы предоставляете, но и не-контексты, что есть текст в файлах , что делает не сопрягать regexp. Для этого используйте C-M-~ во время завершения. (Это переключатель, и он влияет только на будущих команд поиска, а не на текущий.)

Для получения дополнительной информации см. Документ для команды icicle-search.

 Смежные вопросы

  • Нет связанных вопросов^_^