Проверка исходного кода с помощью vim, ctags и других инструментов

Существует много информации о том, как просматривать исходный код с помощью vim/ctags, например, переход к тегу, навигация по стеку тегов, поиск соответствия тегов и т. д.

Однако я не могу найти информацию о том, как на самом деле проверять исходный код и его структуру, подобно чему-то вроде инструмента «исходный браузер» в некоторых IDE.

Вот что я хочу сделать с исходным кодом Python, используя vim, хотя то же самое может быть справедливо и для некоторых других языков:

  1. Перечислите все члены текущего файла (модуля), то есть классы верхнего уровня, функции и/или переменные, определенные в модуле.
  2. Перечислите все методы и атрибуты данного класса.
  3. Перейти к члену в данном классе, например, к чему-то вроде :tag ClassName.my_method.
  4. Список членов пакета/иерархии.

person Maxim    schedule 18.06.2013    source источник


Ответы (2)


Кое-что из того, что вы хотите (по крайней мере, часть «списка»), можно сделать с помощью TagList или TagBar, но я боюсь, что вы путаете Vim с интегрированной средой разработки.

person romainl    schedule 18.06.2013
comment
Как вы думаете, почему я путаю vim с IDE? Я вижу, что файл tags предоставляет достаточно информации, чтобы упростить некоторые общие задачи по проверке и навигации по незнакомому коду. - person Maxim; 18.06.2013
comment
Теги полезны, да. Но не это полезно по сравнению с точностью информации, которую вы можете получить в IDE. Vim не может иметь дело с областью действия, например, он не может перейти к Class.method, если тег не точно Class.method, и т. д. Я думаю, что вы путаете Vim с IDE, потому что вы похоже, ожидается, что у него будут возможности, подобные IDE. - person romainl; 18.06.2013
comment
Что такое IDE, как не редактор с достаточным количеством плагинов? - person tutuDajuju; 04.06.2016

Вы смотрели на Веревку?

http://rope.sourceforge.net/ropevim.html

Функции

Рефакторинг веревки:

  • Переименуй что угодно!
  • Извлечь метод/локальную переменную
  • Переместить класс/функцию/модуль/пакет/метод
  • Встроенный метод/локальная переменная/параметр
  • Реструктуризация (например, преобразование ${a}.f(${b}) в ${b}.g(${a}), где a: type=mymod.A)
  • Представьте завод
  • Изменить сигнатуру метода
  • Преобразование модуля в пакет
  • Инкапсулировать поле
  • Заменить метод объектом метода
  • И несколько других...

Веревка может:

  • Извлечение похожих операторов при извлечении рефакторинга
  • Исправление импорта при необходимости
  • Предварительный рефакторинг
  • Отменить/повторить рефакторинг
  • Прерывание рефакторинга
  • Выполнение межпроектного рефакторинга
  • Обработка основных неявных интерфейсов при переименовании и изменении подписи
  • Поддержка Mercurial, GIT, Darcs и SVN при рефакторинге

Веревка также может помочь IDE с:

  • Автозаполнение
  • Поиск местоположения определения
  • Получение pydoc
  • Поиск вхождений
  • Организация импорта (удаление неиспользуемых и повторяющихся импортов и их сортировка)
  • Генерация элементов Python

http://rope.sourceforge.net/index.html

person Theo Belaire    schedule 19.03.2014
comment
Веревка великолепна... но поддерживает ли она просмотр функций/модулей и т. д. в виде дерева, как это делает gutentags/tagbar? - person alpha_989; 31.03.2018