Комментарии 19
Спасибо за статью.

С разными тегами самая назойливая для меня проблема — это когда один и тот же символ определён в очень большом числе мест. Поскольку я занимаюсь системным программированием на Си, и часто работаю с кастомными тулчейнами, у нас много где определены всякие вещи типа memcpy. exuberant-ctags в таком случае предлагает просто первое попавшееся определение и перебирать их (даже пусть с помощью helm) не хочется.

А как с этим у Global? Пытается ли там индекс учитывать то, откуда какие определение видны?
Не знаю, но я столкнулся с этой проблемой в PHP — написал свой кастомный генератор тэгов на базе ctags, чтобы он к имени тэга добавлял пространство имен в котором тэг расположен. habrahabr.ru/post/182252
Насколько я знаю, ни та, ни другая этим не занимается, оставляя ответственность на редакторе. Так, расширенный ctags формат позволяет хранить инфу об отношениях, на пример принадлежность метода определенному классу. Редактору остается разобраться в этих отношениях и отфильтровать ненужные результаты. К сожалению, сделать это очень не просто, так как сам редактор не знает, к кому относится метод под указателем. Замкнутый круг.
Почему в статье ничего не сказано про cscope? Он как раз решает именно эту проблему:

image
Ну вот я тоже не нашел широкой поддержки языков, поэтому решил не писать. А ctags и gnu global универсальные вещи. Кстати вы пробовали helm-cscope?
Спасибо что напомнили, я кажется видел что csope можно использовать в качестве бэкенда для global.
Да по helm вообще нужно делать нормальную статью со скриншотами.
Как мне кажется, будущее сей области за server side code model. Если кто-то смотрел сорцы QtCreator — он меня поймёт.

Это сильно масштабируемей, может быть разделяемо, и тратит только дешёвые ресурсы (диск и память), притом, может тратить их совершенно на другой, физической машине.

Один из пророков сего подхода — rtags.
Для навигации по файлу в vim-е использую ctags + fzf + ag. Без дополнительных плагинов.

Вот как это выглядит у меня


Поиск в проекте по слову под курсором


На самом деле, эти три утилиты предоставляют очень много возможностей.

Тут можно почитать подробнее github.com/junegunn/fzf/wiki/Examples-(vim)
Обычно хватает ctags, только надо вешать хуки на гит, иначе теги устаревают.
Спасибо за global, буду пробовать.
Скажите, а как можно настроить индексацию с помощью ctags по emacs? Для моего проекта файл TAGS получается порядка 150Мб, но туда попадает всё — сжатые js файлы того же jquery, кеши symfony, библиотеки, установленные с помощью composer-а и т.п.
В документации есть что-то насчёт projectile-globally-ignored-files/projectile-globally-ignored-directories в .dir-locals.el, но, кажется, они никакого влияния на индексацию не оказывают.
Исключать файлы по шаблону можно при помощи опции --exclude. Но как передать ее в projectile не скажу, сам использую Makefile в корне проекта, где есть цель для генерации тэгов.
projectile-ignored-directories — правильная переменная, но убедитесь, что она правда выставляется через .dir-locals.el, и что она имеет верный формат, и что директории, которые вы туда засовываете имеют верный *относительный* путь относительно корня проекта.
projectile-ignored-directories — такого не нашел.
А вот так получилось
((nil . ((projectile-globally-ignored-directories . ("app/cache" ".idea" "vendor" "bin" ".git")))))
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.