С++ ВИМ IDE. Вещи, которые вам понадобятся от него

Я собирался создать C++ IDE Vim расширяемый плагин. Не проблема сделать тот, который удовлетворит мои собственные потребности.

Этот плагин должен был работать с рабочими пространствами, проектами и их зависимостями.
Это для unix-подобной системы с gcc в качестве компилятора C++.

Итак, мой вопрос: что вам больше всего нужно от IDE? Пожалуйста, имейте в виду, что это Vim, где возможно почти все, почти все.

Несколько вопросов.
Как часто вы управляете различными рабочими пространствами с проектами внутри них и их отношениями между ними? Что больше всего раздражает в этом процессе.
Нужно ли пересоздавать "проект" из Makefile?
Спасибо.

Причина создания этого плагина:

С кучей плагинов и самостоятельно написанных мы можем моделировать большинство вещей. Это нормально, когда мы работаем над одним большим "инфинитивным" проектом.
Хорошо, когда у нас уже есть make-файл или джем-файл. Плохо, когда нам приходится создавать свои собственные, в основном путем копирования и вставки существующих.
Все ctags и связанные с cscope вещи должны знать о списке файлов реального проекта. И мы создаем такие. Этот ‹project#get_list_of_files()› и многие подобные могут быть хорошей API-функцией проекта для взаимодействия с существующими и будущими плагинами. Сотрудничество с существующим make-файлом может помочь узнать список реальных файлов проекта и имя исполняемого файла. С системой плагинов внутри плагина могут быть разные шаблоны проектов.

Выше приведены некоторые причины, по которым я начну эту работу. Я хотел бы услышать твой.


person Mykola Golubyev    schedule 08.03.2009    source источник
comment
Вы смотрели пакет cvim F.Mehner? vim.sourceforge.net/scripts/script.php?script_id=213   -  person neversaint    schedule 08.03.2009
comment
Я имел. Там нет ничего, связанного с проектом/рабочей областью, созданием make-файлов, не так ли?   -  person Mykola Golubyev    schedule 08.03.2009
comment
@Мыкола Голубев Ты закончил свой проект? Я искал что-то подобное, и я был бы рад использовать ваш продукт :D   -  person Pacane    schedule 16.09.2011
comment
@MykolaGolubyev, я могу что-нибудь использовать?   -  person Abhinav Gauniyal    schedule 06.02.2015


Ответы (6)


  • отладчик
  • инструменты навигации по исходному коду (сейчас я использую http://www.vim.org/scripts/script.php?script_id=1638 плагин и ctags)
  • скомпилировать lib/project/один исходный файл из ide
  • навигация по файлам в проекте
  • работа с системой контроля версий
  • легкий доступ к истории изменений файлов
  • переименовать файл/переменную/метод функции
  • легкий доступ к справке по С++
  • легкое изменение настроек проекта (Makefiles, jam и т. д.)
  • быстрое автозаполнение для путей/переменных/методов/параметров
  • умная идентификация для новых областей (также будет хорошо, если у разработчика будет возможность настроить правила идентификации)
  • выделение неверной по коду идентификации (табуляция вместо пробелов, пробелы после ";", пробелы возле "(" или ")" и т.д.)
  • переформатировать выбранный блок по соглашению
person bayda    schedule 08.03.2009

Есть несколько проблем. Большинство из них уже решены независимыми и универсальными плагинами.

Относительно определения того, что такое проект.

Учитывая набор файлов в одном и том же каталоге, каждый файл может быть уникальным файлом проекта — у меня всегда есть каталог test/, в котором я размещаю домашние проекты или тестирую поведение компилятора. Напротив, файлы из набора каталогов могут быть частью одного и того же очень большого проекта.

В конце концов, что действительно определяет проект, так это (конечный) «makefile». И зачем ограничивать себя make-файлами, как насчет scons, autotools, ant, (b)jam, aap? Кстати, Sun-Makefiles или GNU-Makefiles?

Более того, я не вижу смысла в том, чтобы vim знал точные файлы в текущем проекте. И даже в этом случае хорошо известный плагин project.vim уже делает работа. Лично я использую плагин local_vimrc (я поддерживаю один, и я видел два других на SF ). С помощью этого плагина мне просто нужно поместить файл _vimrc_local.vim в каталог, и то, что в нем определено (:mappings, :functions, variable, :commands, :settings, ...) будет применяться к каждому файлу в каталог -- я работаю над большим проектом, имеющим дюжину подкомпонентов, каждый компонент живет в своем собственном каталоге, имеет свой собственный make-файл (даже без имени Makefile и без имени каталога)

Относительно понимания кода C++

Каждый раз, когда мы хотим сделать что-то сложное (рефакторинг, например, переименовать-функцию, переименовать-переменную, сгенерировать-переключение-из-текущей-переменной-которая-перечисление,...), нам нужно, чтобы vim понимал С++. Большинство существующих плагинов полагаются на ctags. К сожалению, понимание C++ ctags довольно ограничено — я уже написал несколько продвинутых вещей, но меня часто останавливает плохая информация, предоставляемая ctags. cscope не лучше. В конце концов, я думаю, нам придется интегрировать расширенный инструмент, такой как elsa/pork/ionk/deshydrata/....

NB: Вот на чем сейчас я концентрирую большую часть своих усилий.

Что касается Доксигена

Я не знаю, насколько сложно перейти к определению doxygen, связанному с текущим токеном. Первая трудность — понять, на чем стоит курсор (думаю, omnicppcomplete уже проделал большую работу в этом направлении). Вторая трудность будет заключаться в том, чтобы понять, как doxygen генерирует имя страницы для каждого символа из кода.

Открытие vim в нужной строке кода со страницы doxygen должно быть простым с помощью плагина Greasemonkey.

Что касается отладчика

Существует проект pyclewn для тех, кто запускает vim под Linux и с gdb в качестве отладчика. К сожалению, он не поддерживает другие отладчики, такие как dbx.

Ответы на другие требования:

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

Мой плагин BuildToolsWrapper имеет параметр g:BTW_run_parameters (легко переопределяется решениями project/local_vimrc) . Добавить сопоставление для запроса используемых аргументов очень просто. (см. :h inputdialog())

  • работа с системой контроля версий

Уже существует несколько плагинов, решающих эту проблему. Это не имеет ничего общего с C++ и не должно решаться пакетом C++.

person Community    schedule 09.03.2009
comment
Использование нескольких настроенных плагинов для моделирования проекта мне подходит, если я работаю над одним большим проектом в течение 2 и более лет. Фрагменты кода, vimrc и другие вещи связаны с файлами. Я постараюсь ответить на вопрос, что определяет проект. - person Mykola Golubyev; 10.03.2009

Вещи, которые я хотел бы иметь в IDE, которых нет в тех, которые я использую:

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

  • Меню «Инструменты», которое настраивается для каждого проекта отдельно.

  • Возможность изменить раскладку клавиатуры для каждой возможной команды.

  • Возможность создавать списки конфигураций проекта в текстовом виде

  • Интеллектуальные плавающие (не закрепленные) окна для отладчика и т. д., которые появляются только тогда, когда они мне нужны, остаются сверху и затем исчезают, когда они больше не нужны.

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

  • Встроенная поддержка Doxygen или аналогичного, поэтому я могу щелкнуть документ Doxygen и сразу перейти к коду. Вы также можете перейти от кода к Doxygen.

Без сомнения, кто-то сейчас скажет, что Eclipse может делать то или иное, но для меня он слишком медленный и раздутый.

person Community    schedule 08.03.2009

Добавление к ответу Нила:

  • интеграция с gdb как в emacs. Я знаю о clewn, но мне не нравится, что мне приходится перезапускать vim, чтобы перезапустить отладчик. В clewn vim интегрируется в отладчик, а не наоборот.
person Nathan Fellman    schedule 08.03.2009

Не уверен, что вы разрабатываете для Windows, но если это так, я предлагаю вам проверить Viemu. Это довольно хорошее расширение VIM для Visual Studio. Мне очень нравится Visual Studio как IDE (хотя я все еще думаю, что VC6 трудно превзойти), поэтому расширение Vim для VS было идеальным для меня. Функции, которые я бы предпочел лучше работать в Vim IDE:

  • Запись макроса подвержена небольшим ошибкам, особенно с отступами. Я обнаружил, что могу легко и часто записывать макросы в Vim, когда редактирую код (например, беру enum defn из заголовка и запускаю соответствующий оператор switch), но обнаружил, что Viemu немного ненадежный в этом отделе.
  • Завершение кода VIM выбирает слова в текущем буфере, где Viemu подключается к материалам завершения кода VS. Это означает, что если я только что создал имя метода и хочу нажать ctrl ] для автоматического завершения, Vim подберет его, а Viemu — нет.
person RedBlueThing    schedule 09.03.2009
comment
Viemu не обладает мощностью плагинов Vim. Только Unix-подобные системы. В Windows есть Visual Studio. - person Mykola Golubyev; 10.03.2009
comment
Да, я увидел ваши правки и понял, о чем вы просили :). - person RedBlueThing; 10.03.2009

Для меня это просто необходимость

  • хорошая интеграция с ctags, так что вы можете перейти к определению
  • интеллектуальное завершение, которое также дает вам прототип функции
  • простой способ переключения между кодом и заголовками
  • интерактивная отладка с точками останова, но, возможно,
  • может быть складной
  • дополнительные бонусные баллы за инструменты рефакторинга, такие как метод переименования или извлечения

Я бы сказал, держитесь подальше от определения проектов - просто рассматривайте всю файловую ветвь как часть «проекта» и дайте пользователям иметь файл настроек, чтобы переопределить это значение по умолчанию.

99% разницы в скорости, которую я вижу между пользователями IDE и vim, заключается в поиске кода и навигации. Вы должны иметь возможность поиска фразы в исходном дереве (или разумно искать правильный символ с помощью ctags), показывать все совпадения и переключаться на этот файл примерно за два или три нажатия клавиши.

Все остальное дерьмо вроде навигации по репозиторию или интерактивной отладки — это хорошо, но есть и другие способы решения этих проблем. Я бы даже отказался от интерактивной отладки. Просто сконцентрируйтесь на том, что делает IDE хорошими редакторами — просмотр проекта в целом, а не одного файла.

На самом деле, есть ли плагины для vim, которые уже достигают этого?

person heathkit    schedule 02.02.2010