элементы / члены структуры поиска vim - PullRequest
0 голосов
/ 08 мая 2020

Кто-нибудь знает плагин vim, который позволяет искать элементы структуры / элементы структур в C или классы в случае C ++?

Я думаю о чем-то похожем на переход к определению структура с использованием cscope / ctags, но в идеале мне нужно что-то похожее на перемещение курсора по желаемой переменной, и нажатие клавиши приведет к появлению таблицы, как при использовании omni-complete?

Я пытался найти что-то, но безрезультатно.

Требование: должно быть исключительно для vim. 99% моих разработок - это sshing на удаленный компьютер linux.

Обычно мой рабочий процесс: git клонировать проект, настраивать ctags и cscope, открывать нужный файл и загружать мою базу данных cscope и Здесь я остаюсь большую часть дня, перемещаясь по каталогу, в котором находится плагин nerd-tree.

Пока что я использую комбинацию плагинов ctags / cscope и calltree для поиска вызываемых функций.

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

Есть идеи?

1 Ответ

0 голосов
/ 09 мая 2020

С помощью universal-ctags, если вы использовали правильные параметры, вы всегда можете получить члены типа класса / структуры.

Если вы читаете между строк, это означает, что нет эффективного способа сделать это с переменной C ++, если вы придерживаетесь vimscript. Я пробовал сделать это , но в конце концов отказался от этого пути; путь, который не поддерживает auto.

Теперь я начал использовать (/ реализовывать) другой подход для анализа кода C ++ и использования информации из vim: я полагаюсь на libclang. Загвоздка в том, что он должен работать с текущей единицей перевода (TU), и если TU длинный (например, если он включает много длинных файлов), требуется время, чтобы проанализировать его в первый раз с момента последнего изменения. (Я ожидаю, что решение изменится с модулями C ++ 20) - анализ выполняется по запросу, а не в фоновом режиме. Примечание: мой плагин в настоящее время находится в разработке, и я еще не предоставил функцию Vim высокого уровня, которая возвращает тип переменной и связанную с ней информацию (тип, члены, возможные значения перечисления ...)

Если вашей конечной целью является пополнение членов, инструменты на основе clang предоставляют для этой цели специальный API, который будет более эффективным, чем полный анализ текущего TU. Плагины, которые вы не используете sh для использования, используют этот API. Серверы LSP даже пытаются кэшировать как можно больше информации (только для целей навигации и завершения).

Обратите внимание, что существует несколько плагинов, таких как tagbar , которые пытаются организовать информацию, извлеченную с помощью ctags и представьте его в виде иерархии c. Обратите внимание, что это не поможет ни с устранением неоднозначности, ни с auto.

...