VIM: Более точные решения синтаксического анализа кода C / C ++? - PullRequest
24 голосов
/ 22 февраля 2011

Предварительно: Я работаю в VIM уже почти год.Много замечательных вещей: комбинации, сценарии.Всякий раз, когда я редактирую что-то в другом редакторе, я чувствую себя вялым / некомфортным без навигации VIM.

Проблема: Больше всего меня беспокоит навигация по исходному коду с использованием существующихинструменты (ctags, cscope).Часто ctags не может найти объявление переменной, а cscope в отличие от ctags находит все определения с одинаковым именем переменной.То же безумие с навигацией по дереву вызовов, поиском предварительных объявлений вместе с определением одного класса и т. Д. По сравнению с MS Intellisense, Visual Assist или даже навигацией по исходному коду в Eclipse, Exuberant Tags / cscope, по-видимому, устарела как минимум на 10 лет.

Я знаю, что есть такие инструменты, как ViEMU, но они на самом деле не решают проблему, поскольку вы теряете много функциональности VIM.

Вопрос: Мне было интересно, есть лиинструмент, который лучше разбирает исходные тексты, или есть какой-то способ интегрировать механизмы синтаксического анализа исходных текстов, такие как Intellisense, в VIM?Может быть, есть коммерческие решения или есть люди, которые готовы их реализовать?

Все преимущества VIM, по-видимому, экономят меньше времени, чем тратятся при переходе к определению класса, по сравнению с Visual Assist, где это делается.одним нажатием клавиши Alt-G.

Ответы [ 2 ]

7 голосов
/ 23 февраля 2011

Дерево поиска и вызовов

Вы можете попробовать eclim , который является способом использования некоторых функций Eclipse в Vim.

Для C / C ++ он предоставляет:

  • Контекстно-зависимое завершение (хотя оно отключено в Windows из-за ошибок)
  • Контекстно-зависимый поиск в файлах проекта (через :CSearchContext)
  • Дерево вызововдля функций / методов (:CCallHierarchy)
  • Проверка кода (:Validate)

Это не очень хорошо, но в некоторых случаях может помочь.

Завершение кода

Что касается автоматического завершения кода, я в основном использую OmniCppComplete , который использует теги для обеспечения завершения кода с учетом контекста.Это не так уж и плохо.

По совету Люка Эрмитта вы также можете использовать clang_complete , который не требует ctags, но требует установленного clang.

1 голос
/ 22 февраля 2011

К сожалению, это настоящая проблема.ctags или cscope едва ли могут конкурировать с просмотром кода в Visual Studio - на самом деле они используют внешний интерфейс компилятора C ++ для анализа кода для редактора.

...