Теги в emacs с большой кодовой базой

Я задавался вопросом, как люди используют теги в emacs при работе над большой кодовой базой (приблизительно 50 000 cpp |. h |. файлы cs). Некоторые мои коллеги используют средства индексирования (имена выходят из меня), которые возвращают все результаты по кодовой базе в секундах. Я, может казаться, не получаю в какой-либо степени такую производительность на emacs и тегах, но это - по существу то же самое!

Некоторые подходы я попробовал:

  1. Создайте каждый ОТМЕЧАЕТ файл для целого репозитория. Это является обычно довольно большим и обычно неудобным использовать (иногда слишком много соответствий тегов).
  2. Создайте отдельные файлы ТЕГОВ для cpp|h|cs. Более сфокусированный, если я знаю (примерно (по крайней мере, язык программирования, который будет использоваться)), что я, оказывается, ищу.
  3. Меньшие файлы тегов на разделе репозитория. Они являются большими, когда я вполне уверен в области, но управление наверху является болью. Я буду обычно генерировать их как и, когда необходимый.

Любые предложения \примеры Вашего рабочего процесса ценятся.

16
задан cristobalito 26 June 2010 в 16:18
поделиться

4 ответа

Вот сценарий, который я использую:

#!/usr/bin/bash
echo "Creating list of files to build tags..."
find `pwd` -name '*.c' -o -name '*.h' > cscope_files

echo "Building cscope and ctags databases..."
cscope -bqki cscope_files
ctags -eL cscope_files

> cat cscope_files | wc -l
10700

Для 10700 файлов, которые сопоставимы с вашим проектом, переходы между тегами происходят мгновенно. Как вы могли заметить, при этом создаются базы данных cscope и etags. Я запускаю этот сценарий на вершине дерева. Также, если это может помочь, это сочетания клавиш в моем файле .emacs.el.

(defun hide-cscope-buffer ()
  "Turn off the display of cscope buffer"
   (interactive)
   (if (not cscope-display-cscope-buffer)
       (progn
         (set-variable 'cscope-display-cscope-buffer t)
         (message "Turning ON display of cscope results buffer."))
     (set-variable 'cscope-display-cscope-buffer nil)
     (message "Toggling OFF display of cscope results buffer.")))


(global-set-key [f9] 'cscope-find-this-symbol)
(global-set-key [f10] 'cscope-find-global-definition-no-prompting)
(global-set-key [f11] 'cscope-find-functions-calling-this-function)
(global-set-key [f12] 'cscope-find-this-file)
(global-set-key (kbd "C-t") 'cscope-pop-mark)
(global-set-key (kbd "C-n") 'cscope-next-symbol)
(global-set-key (kbd "C-p") 'cscope-prev-symbol)
(global-set-key (kbd "C-b") 'hide-cscope-buffer)
(global-set-key [S-f7] 'cscope-next-file)
(global-set-key [S-f8] 'cscope-prev-file)
(global-set-key [S-f9] 'cscope-find-this-text-string)
(global-set-key [S-f10] 'cscope-find-global-definition)
(global-set-key [S-f11] 'cscope-find-egrep-pattern)                                                                                                                           
(global-set-key [S-f12] 'cscope-find-files-including-file)

Однако я не являюсь постоянным пользователем emacs. Я использовал их, когда пытался переключиться на emacs, но затем вернулся к vim, где я нашел способы делать все то, что мне нравилось делать в emacs.

Обновление: Для файлов с несколькими тегами в иерархии каталогов см. Раздел Файлы с несколькими тегами этой статьи .

5
ответ дан 30 November 2019 в 23:05
поделиться

Я написал несколько пакетов, помогающих управлять множественными совпадениями тегов и множеством файлов TAGS:

http://www.emacswiki.org/emacs/EtagsSelect

http: // www .emacswiki.org / emacs / EtagsTable

4
ответ дан 30 November 2019 в 23:05
поделиться

Возможно, вы захотите взглянуть на GNU Global. Он поддерживает C и C++ (наряду с Yacc, Java, PHP4 и assembly), так что может работать приемлемо для C# (я не писал на C#, так что могу говорить полную чушь).

Если это работает, то это должно быть значительно быстрее, чем обычный файл TAGS.

2
ответ дан 30 November 2019 в 23:05
поделиться

Как уже упоминалось, GNU Global довольно хорош.Вот краткое введение по его использованию из emacs.

Обратите внимание: если ваш проект действительно состоит из 50К файлов (и 50К локальных файлов), первый запуск (для индексации всего этого) может быть немного медленным.

1
ответ дан 30 November 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: