ctags c ++ находит первый экземпляр функции независимо от класса

Я использую ctags (-e), и он работает очень хорошо. Однако, когда я ищу функцию-член, ctags возвращает первое найденное определение. Например:

ClassA classA;
classA.Initialize();
classA.DoSomething();

ClassB classB;
classB.Initialize();
classB.PerformAction();

Если я ищу тег Initialize() (M-. или же g^]) на classA.Initialize() Я ожидаю пойти в ClassA::Initialize(), Если так получилось, что есть другой класс с таким же методом, и его тег появляется раньше classAтег в файле тега (скажем, это ClassB::Initialize()) Меня отвезли в ClassB::Initialize(),

Тем не менее, если, когда я печатаю M-. и я исправляю тег, который хочу посетить ClassA::Initialize() тогда я иду в ClassA::Initialize(), Есть ли способ сделать это автоматически?

Такое поведение одинаково для emacs и vim.

Более того, с глобальным GNU (gtags) даже не найдешь ClassA::Initialize(), Он просто распечатает все классы, которые имеют Initialize() метод.

РЕДАКТИРОВАТЬ:

Если вопрос еще не ясен, я спрашиваю, есть ли плагин, который будет проверять метод (например, это функция-член, доступ к которой осуществляется через . или же ->) и если он найдет тип объекта, а затем искать Object::Method а не для метода.

Это простая функциональность. Например:

  1. Проверьте, является ли тег методом.
  2. Если это метод, является ли он членом класса.
  3. Если член класса разбирает код перед текущим курсором и находит объявление (ClassA classA).
  4. Ищу ClassA::Initialize() если все вышеперечисленное верно вместо Initialize(),

Это понятнее?

-1

Решение

Ctags только индексирует ваш код. Вы используете его только для генерации tags файл, пока поиск выполняется вашим редактором. Как это делает поиск — дело вашего редактора, и ctags не имеет к этому никакого отношения.

Когда вы делаете <C-]> по имени метода Vim переходит к первому найденному совпадению. Поскольку у него нет средств для анализа вашего кода и ваших мыслей, он не может решить, какое соответствие вы на самом деле хотите.

Наиболее близким является понятие «приоритет», см. :h tag-priority, но это тебе не поможет.

И обычный способ справиться с этим ограничением — использовать команду, которая перечисляет все совпадения, например g] или же g<C-]>,

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector