Рефакторинг C / C ++ в Vim (например, извлечение метода, как в Eclipse) - PullRequest
29 голосов
/ 18 марта 2010

Существуют ли в Vim плагины или встроенные методы для выполнения рефакторинга кода C или C ++, что-то вроде инструментов рефакторинга в Eclipse?

Я особенно заинтересован в инструменте рефакторинга методов извлечения из Eclipse, который будет определять параметры из новых методов и, как правило, также угадывать переменную для использования в качестве возвращаемого значения.

Ответы [ 3 ]

16 голосов
/ 08 сентября 2011

Я написал общий модуль рефакторинга . C ++ является одним из основных обрабатываемых языков (так как это мой основной язык в работе). Метод извлечения поддерживается.

Для C ++ плагин способен (благодаря ctags) выводить большинство (но, к сожалению, не всегда все - благодаря ctags ...) переменных, входящих и выходящих из извлеченной функции. Мне все еще нужно написать небольшое диалоговое окно, чтобы выбрать способ обмена переменными in / out (const ref, rvalue ref, copy, указатель, кортежи, struct и т. Д.) (Кстати, помощь приветствуется как GUI не мое дело ^^ ') .

16 голосов
/ 20 марта 2010

Нет, хотя Vim является хорошей средой для редактирования и может быть настроена множеством способов (свертывание кода, раскраска синтаксиса, расширение макроса и т. Д.), Большинство из них выполняется на уровне синтаксиса, а не на семантическом уровне , Даже свертывание кода просто совпадает с противоположными скобками.

Чтобы правильно выполнить рефакторинг, вы должны иметь много семантических знаний об AST, о том, какие переменные объявлены, в какой области и т. Д. Среды IDE, такие как Eclipse, создают кэш переменных, определенных в каждой лексической области, чтобы они могли быстро ссылаться на то, где они используются в плане определения того, что переименовывать и где.

Это не значит, что вы не можете делать некоторые вещи синтаксически; в конце концов, достаточно просто вынуть блок кода и поместить его в отдельную функцию. Возможно, вы даже сможете угадать некоторые параметры (например, найти список переменных, выяснить, какие из них имеют локальные объявления, удалить их, а что осталось - ваши параметры. Но Eclipse также делает другие вещи - например, выясняет, есть ли какие-либо переменные). изменено в функции и гарантирует, что они возвращаются возвращаемым значением. Он также проверяет наличие любых исключений и добавляет их в список.

Чистый эффект состоит в том, что, хотя вы можете приблизить некоторые из них в Vim, вы действительно не сможете заставить это работать в среде только для Vim. Вы можете использовать Vim-подобную привязку клавиш в собственном Eclipse или посмотреть на eclim . С домашней страницы:

Основная цель eclim - принести Функциональность Eclipse для Vim редактор. Первоначальной целью было обеспечить Java-функциональность Eclipse в VIM, но поддержка различных других языки (c / c ++, php, python, ruby, CSS, HTML, XML и т. д.) были добавлены и еще несколько запланировано.

Eclim - это менее приложение и больше интеграции двух великих проекты. Первое, Вим, возможно один из лучших текстовых редакторов в существование. Второе, Затмение, предоставляет много отличных инструментов для разработка на разных языках. каждый предоставляет множество функций, которые могут увеличить производительность разработчика, но оба все еще оставляют что-то желательно. Vim не поддерживает нативную Java и многие из расширенных возможностей доступно в Eclipse. Затмение, на С другой стороны, все еще требует использования мышь для многих вещей, и когда по сравнению с Vim, обеспечивает менее идеальный интерфейс для редактирования текста.

Вот где эклим вступает в игру. Вместо того, чтобы пытаться написать IDE в Vim или редактор Vim в Eclipse, eclim предоставляет подключаемый модуль Eclipse, который предоставляет возможности Eclipse через интерфейс сервера и набор Vim плагины, которые общаются с Eclipse через этот интерфейс.

Это не только дает Eclipse-подобную среду, это - это Eclipse. Но вы по-прежнему получаете функции навигации и редактирования текста в vim. Похоже, это может удовлетворить ваши потребности, хотя в документации по поддержка рефакторинга не указано, что она обеспечивает функциональность метода извлечения.

1 голос
/ 27 апреля 2017

После поиска высокого и низкого уровня vim с рефакторингом для C ++, это лучшее решение, которое я нашел.

  • Visual Studio 2013 и выше - отличная среда разработки и отладки для C ++, но не имеет достаточного рефакторинга или vim
  • Установите плагин vsvim - теперь у вас есть вся навигация vim, поиск, замена строк и т. Д. (Некоторые расширенные функции не поддерживаются)
  • Установите Resharp C ++ - отлично подходит для рефакторинга за счет скорости. Это делает его немного неуклюжим, но если вы хотите сделать автоматическое генерирование методов / переменных, переименовать локальные / глобальные / переменные или функции метода, поиск вариантов использования в решении и другие функции, то это того стоит.

Это лучшая комбинация, которую я нашел для разработки, отладки и рефакторинга на C ++. Делает меня по крайней мере в 3 - 5 раз быстрее. Надеюсь, это поможет и вам.

...