Как найти файлы в файле TAGS в Emacs - PullRequest
2 голосов
/ 06 октября 2011

Я сгенерировал файл TAGS, используя ctags для файла * .h и * .cpp в каталоге. Как найти файлы в файле TAGS.

Предполагается, что я сгенерировал файл TAGS для файлов one.h two.h three.h. Что такое команда для поиска файла one.h, two.h, three.h, а не тегов в этих файлах.

Ответы [ 4 ]

5 голосов
/ 06 октября 2011

Предполагая, что вы просто хотите знать, как использовать файл TAGS ...

Загрузить файл TAGS с помощью:
Mx visit-tags-table RET Файл TAGS или родительский каталог RET

Затем вы можете использовать его с:

  • M -. (то есть find-tag)
  • Mx tags-search RET шаблон RET
    M -, для перехода к каждому последующему матчу)
  • Mx tags-apropos RET шаблон RET
  • Mx tags-query-replace RET шаблон RET замена RET

Это настройки по умолчанию.Естественно, доступны улучшения:
http://www.emacswiki.org/emacs/EmacsTags

Лично я использую etags-select (который вы можете получить через ELPA), и у меня есть M -. , связанный с etags-select-find-tag.

2 голосов
/ 06 октября 2011

Я написал это пару лет назад, но пока не успел выпустить его ... Наслаждайтесь!

Функция tags-extra-find-file позволит вам посетить файл в текущей таблице тегов с завершением имени файла. Это идеально, если у вас много исходных файлов, распределенных по большому количеству каталогов. (Честно говоря, я использую это по крайней мере сто раз в день ...)

(defun tags-extra-get-all-tags-files ()
  "Return all, fully qualified, file names."
  (save-excursion
    (let ((first-time t))
      (while (visit-tags-table-buffer (not first-time))
        (setq first-time nil)
        (setq res
              (append res (mapcar 'expand-file-name (tags-table-files)))))))
  res))


(defun tags-extra-find-file (name)
  "Edit file named NAME that is part of the current tags table.
The file name should not include parts of the path."
  (interactive
   (list
    (completing-read "Name of file: "
                     ;; Make an a-list of all files without path.
                     (mapcar
                      (lambda (file)
                        (cons (file-name-nondirectory file) nil))
                      (tags-extra-get-all-tags-files)))))
  (let ((files (tags-extra-get-all-tags-files))
        (done nil)
        (name-re (concat "^" (regexp-quote name) "$")))
    (while (and (not done)
                files)
      (let ((case-fold-search t))
        (if (string-match name-re (file-name-nondirectory (car files)))
            (setq done t)
          (setq files (cdr files)))))
    (if files
        (find-file (car files))
      (error "File not found in the tags table."))))
1 голос
/ 06 октября 2011

Как то так? Это может быть не совсем надежно.

(defun visit-tags-table-and-files (file)                                        
  "Run `visit-tags-table FILE', then visit all the referenced files."           
  (interactive "fTags file: ")                                                  
  (visit-tags-table file)                                                       
  (save-excursion                                                               
    (set-buffer (get-file-buffer tags-file-name))                               
    (mapc #'find-file (tags-table-files)) ) )
0 голосов
/ 24 июня 2016

Спасибо @ Lindydancer за ответ и emacswiki ido .Версия emacswiki поддерживает только один файл тегов.Объединяя их, я могу перейти к любому файлу во всех файлах TAG.Петти близок к возвышенному тексту, что угодно.

Вот код.

;;; using ido find file in tag files
(defun tags-extra-get-all-tags-files ()
  "Return all, fully qualified, file names."
  (save-excursion
    (let ((first-time t)
          (res nil))
      (while (visit-tags-table-buffer (not first-time))
        (setq first-time nil)
        (setq res
              (append res (mapcar 'expand-file-name (tags-table-files)))))
      res)))

(defun ido-find-file-in-tag-files ()
  (interactive)
  (find-file
   (expand-file-name
    (ido-completing-read
     "Files: " (tags-extra-get-all-tags-files) nil t))))
...