VIM: Более точные решения по анализу кода на C/С++?
Pre:
Я работаю в 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.
Ответы
Ответ 1
Дерево поиска и вызова
Вы можете попробовать eclim, что является способом использования некоторых функций Eclipse в Vim.
Для C/С++ он обеспечивает:
- Контекстно-зависимое завершение (хотя оно отключено в Windows, потому что оно ошибочно)
- Контекстно-зависимый поиск в файлах проекта (через
:CSearchContext
)
- Дерево вызовов для функций/методов (
:CCallHierarchy
)
- Проверка кода (
:Validate
)
Это не очень удобно, но в некоторых случаях это может помочь.
Завершение кода
Что касается автоматического завершения кода, я в основном использую OmniCppComplete, в котором используются теги для обеспечения завершения кода контекстного кода. Это не так уж плохо.
Как посоветовал Люк Хермит, вы также можете использовать clang_complete, который не нуждается в ctags, но требует установки clang.
Ответ 2
К сожалению, это настоящая проблема. ctags или cscope вряд ли могут конкурировать с просмотром кода Visual Studio - на самом деле он использует компилятор С++ для анализа кода для редактора.