Я задавался вопросом, как люди используют теги в emacs при работе над большой кодовой базой (приблизительно 50 000 cpp |. h |. файлы cs). Некоторые мои коллеги используют средства индексирования (имена выходят из меня), которые возвращают все результаты по кодовой базе в секундах. Я, может казаться, не получаю в какой-либо степени такую производительность на emacs и тегах, но это - по существу то же самое!
Некоторые подходы я попробовал:
Любые предложения \примеры Вашего рабочего процесса ценятся.
Вот сценарий, который я использую:
#!/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.
Обновление: Для файлов с несколькими тегами в иерархии каталогов см. Раздел Файлы с несколькими тегами этой статьи .
Я написал несколько пакетов, помогающих управлять множественными совпадениями тегов и множеством файлов TAGS:
Возможно, вы захотите взглянуть на GNU Global. Он поддерживает C и C++ (наряду с Yacc, Java, PHP4 и assembly), так что может работать приемлемо для C# (я не писал на C#, так что могу говорить полную чушь).
Если это работает, то это должно быть значительно быстрее, чем обычный файл TAGS.
Как уже упоминалось, GNU Global довольно хорош.Вот краткое введение по его использованию из emacs.
Обратите внимание: если ваш проект действительно состоит из 50К файлов (и 50К локальных файлов), первый запуск (для индексации всего этого) может быть немного медленным.