Теги в Emacs с большой кодовой базой - PullRequest
16 голосов
/ 26 июня 2010

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

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

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

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

Ответы [ 4 ]

5 голосов
/ 26 июня 2010

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

#!/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.

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

4 голосов
/ 26 июня 2010

Я написал несколько пакетов для управления несколькими попаданиями тегов и многими файлами TAGS:

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

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

2 голосов
/ 28 июня 2010

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

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

1 голос
/ 01 июля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...