Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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