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

StackOverflow https://stackoverflow.com/questions/2470653

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top