С++ vim IDE. Что вам нужно от этого
Я собирался создать плагин С++ IDE Vim с возможностью расширения . Это не проблема, чтобы сделать тот, который удовлетворит мои собственные потребности.
Этот плагин будет работать с рабочими областями, проектами и его зависимостями.
Это для unix-подобной системы с gcc как компилятор С++.
Итак, мой вопрос в том, какие самые важные вещи вам нужны из среды IDE? Пожалуйста, учтите, что это Vim, где почти все, почти возможно.
Несколько вопросов:
Как часто вы управляете разными рабочими пространствами с проектами внутри них и их отношениями между ними? Что является самым раздражающим в этом процессе.
Необходимо ли воссоздать "проект" из Makefile?
Спасибо.
Причина создания этого плагина:
С кучей плагинов и самозаписывающихся мы можем имитировать большинство вещей. Это нормально, когда мы работаем над одним большим "инфинитивным" проектом.
Хорошо, когда у нас уже есть файл makefile или jam. Плохо, когда мы должны создавать свои собственные, в основном путем копирования и вставки существующих.
Все ctags и связанные с cscope вещи должны знать о списке реальных файлов проекта. И мы создаем такие. Этот < проект # get_list_of_files() > и многие аналогичные могут быть хорошей функцией api проекта для сотрудничества с существующими и будущими плагинами.
Сотрудничество с существующими make файлами может помочь найти список реальных файлов проекта и исполняемого имени.
С плагиновой системой внутри плагина могут быть разные шаблоны проектов.
Ниже приведены некоторые причины, по которым я начну работу. Я хотел бы услышать ваш.
Ответы
Ответ 1
- отладчик
- Инструменты навигации исходного кода (теперь я использую http://www.vim.org/scripts/script.php?script_id=1638 плагин и ctags)
- скомпилировать lib/project/один исходный файл из ide
- Навигация по файлам в проекте
- работа с системой управления версиями
- простой доступ к истории изменений файла
- переименование файлов/переменных/методов
- легкий доступ к справке С++
- параметры простого изменения проекта (Makefiles, jam и т.д.)
- быстрая автозаполнение для путей/переменных/методов/параметров
- интеллектуальная идентификация для новых областей (также будет хорошо, если разработчик будет иметь возможность устанавливать правила идентификации)
- выделение неправильным идентификатором кода (вкладки вместо пробелов, пробелы после ";", пробелы рядом "(" или ")" и т.д.)
- переформатирование выбранного блока с помощью convstion
Ответ 2
Существует несколько проблем. Большинство из них уже решены с помощью независимых и общих плагинов.
Что касается определения того, что представляет собой проект.
Учитывая набор файлов в одном каталоге, каждый файл может быть уникальным файлом проекта - у меня всегда есть каталог tests/, где я размещаю проекты домашних животных или где я тестирую поведение компилятора. Наоборот, файлы из набора каталогов могут быть частью одного и того же и очень большого проекта.
В конце концов, то, что действительно определяет проект, является (листом) "makefile" - и зачем ограничивать себя make файлами, как насчет scons, autotools, ant, (b) jam, aap? И BTW, Sun-Makefiles или GNU-Makefiles?
Кроме того, я не вижу смысла указывать точные файлы в текущем проекте. И даже в этом случае хорошо известный project.vim плагин уже выполняет эту работу. Лично я использую local_vimrc plugin (я поддерживаю один, и я видел двух других в SF). С этим плагином мне просто нужно отбросить файл _vimrc_local.vim в каталог, и то, что определено в нем (: сопоставления,: функции, переменные,: команды,: настройки,...), будет применяться к каждому файлу под каталог - я работаю над большим проектом, имеющим дюжину подкомпонентов, каждый компонент живет в своем собственном каталоге, имеет свой собственный makefile (даже не названный Makefile, ни с именем каталога)
Что касается понимания кода на С++
Каждый раз, когда мы хотим сделать что-то сложное (рефакторинг, такой как rename-function, rename-variable, generate-switch-from-current-variable-which-an-enum,...), нам нужно, чтобы vim понимание С++. Большинство существующих плагинов полагаются на ctags. К сожалению, ctags понимание С++ довольно ограничено - я уже написал несколько продвинутых вещей, но меня часто останавливают из-за плохой информации предоставляемые ctags. cscope не лучше. В конце концов, я думаю, нам придется интегрировать расширенный инструмент, например, elsa/pork/ionk/deshydrata/....
NB: То, где, сейчас, я концентрирую большинство своих усилий.
Что касается Doxygen
Я не знаю, как трудно перейти к определению doxygen, связанному с текущим токеном. Первая трудность заключается в том, чтобы понять, на что курсор включен (я думаю, omnicppcomplete уже проделал большую работу в этом направлении). Вторая трудность заключается в том, чтобы понять, как doxygen генерирует имя страницы для каждого символа из кода.
Открытие vim в правой строке кода с доксигенной страницы должно быть простым с помощью плагина greasemonkey.
Относительно отладчика
Существует проект pyclewn для тех, кто запускает vim под linux, и с gdb в качестве отладчика. К сожалению, он не поддерживает другие отладчики, такие как dbx.
Ответы на другие требования:
- Когда я запускаю или отлаживаю мою скомпилированную программу, мне бы хотелось, чтобы появилось диалоговое окно, которое запрашивает параметры командной строки. Он должен помнить последние 20 или около того параметров, которые я использовал для проекта. Я не хочу редактировать свойства проекта для этого.
My Плагин BuildToolsWrapper имеет параметр g:BTW_run_parameters
(легко переопределяется с помощью решений project/local_vimrc). Добавление сопоставления для использования аргументов очень просто. (см.: h inputdialog())
- работа с системой управления версиями
Уже существует несколько плагинов, которые решают эту проблему. Это не имеет ничего общего с С++, и это не должно решаться пакетом С++.
Ответ 3
Вещи, которые я хотел бы в среде IDE, чтобы те, которые я использую, не предоставляют:
-
Когда я запускаю или отлаживаю мою скомпилированную программу, мне бы хотелось, чтобы появилось диалоговое окно, которое запрашивает параметры командной строки. Он должен помнить последние 20 или около того параметров, которые я использовал для проекта. Я не хочу редактировать свойства проекта для этого.
-
Меню "Инструменты", которое настраивается для каждого проекта
-
Возможность переназначения сопоставлений клавиатуры для каждой возможной команды.
-
Возможность создания списков конфигураций проекта в текстовой форме
-
Интеллектуальные плавающие (не закрепленные) окна для отладчика и т.д., которые появляются только тогда, когда они мне нужны, остаются на вершине, а затем исчезают, когда они больше не нужны.
-
Встроенный анализ метрик кода, поэтому я получаю список самых сложных функций в проекте и могу нажимать на них, чтобы перейти к коду
-
Встроенная поддержка Doxygen или аналогичная, поэтому я могу щелкнуть документ Doxygen и перейти непосредственно к коду. Sjould также может отменить переход от кода к Doxygen.
Без сомнения, кто-то теперь скажет, что Eclipse может делать то или это, но он слишком медленный и раздутый для меня.
Ответ 4
Добавление в Нейл ответ:
- интеграция с gdb как в emacs. Я знаю clewn, но мне не нравится, что мне нужно перезапустить vim, чтобы перезапустить отладчик. С чистым vim интегрируется в отладчик, но не наоборот.
Ответ 5
Не уверен, что вы работаете в Windows, но если вы предлагаете вам проверить Viemu. Это довольно хорошее расширение VIM для Visual Studio. Мне очень нравится Visual Studio в качестве IDE (хотя я все еще думаю, что VC6 трудно превзойти), поэтому расширение Vim для VS было идеально для меня. Функции, которые я предпочел бы лучше работать в среде Vim IDE, следующие:
- Макросъемка немного подвержена ошибкам, особенно с отступом. Я нахожу, что могу легко и часто записывать макросы в Vim, пока я редактирую код (например, беру enum defn из заголовка и выкручивая соответствующий оператор switch), но обнаружил, что Viemu немного ошибочен в этом департаменте.
- Выполнение кода VIM подбирает слова в текущем буфере, где Viemu подключается к материалам завершения кода VS. Это означает, что если я только что создал имя метода, и я хочу, чтобы ctrl] автоматически завершил, Vim заберет его, но Viemu не будет.
Ответ 6
Для меня это просто к потребностям
- хорошая интеграция с ctags, поэтому вы можете перейти к определению
- интеллектуальное завершение, которое также даст вам прототип функции
- простой способ переключения между кодом и заголовками
- интерактивная отладка с брейк-точками, но, возможно,
- возможно складывание
- дополнительные бонусные баллы для инструментов рефакторинга, таких как метод переименования или извлечения.
Я бы сказал, держаться подальше от определения проектов - просто обработайте всю ветвь файла как часть "проекта" и пусть у пользователей есть файл настроек, чтобы переопределить этот стандартный
99% разницы в скорости, которую я вижу между пользователями IDE и vim, - это поиск кода и навигация. Вы должны иметь возможность grep вашего исходного дерева для фразы (или разумно искать правильный символ с помощью ctags), показывать все хиты и переключаться на этот файл в виде двух или трех нажатий клавиш.
Все остальное дерьмо, как навигационная система или интерактивная отладка, хороши, но есть и другие способы решения этих проблем. Я бы сказал, что даже отключить интерактивную отладку. Просто сосредоточьтесь на том, что делает хорошие редакторы IDE хорошими - у вас есть представление "большой картинки" вашего проекта, а не один файл.
На самом деле, есть ли какие-либо плагины для vim, которые уже достигают этого?