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

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

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

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

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

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

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

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

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

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

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

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

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