Как заставить Vim распознавать тип объекта при доступе к контейнеру STL, для автозаполнения - PullRequest
3 голосов
/ 02 марта 2012

У меня есть подключаемый модуль omnicppcomplete с обильными ctags, я генерирую теги для проектов с помощью следующей команды:

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .

Я пытаюсь добиться, чтобы Vim распознавал тип объекта при доступе к немучерез контейнер STL, чтобы предоставить мне соответствующий список предложений автозаполнения.

Например, предположим, что у объекта IntWrapper есть метод getTheInt(), а у меня есть вектор IntWrappers:

std::vector<IntWrapper> wrappers;

Если у меня есть следующий код:

for (size_t i = 0; i < wrappers.size(); i++) {
    wrappers[i].<VIM Cursor is here>
}

Я бы хотел, чтобы VIM понял, что оболочка [i] имеет тип IntWrapper, и дал бы мне метод getTheInt() какпервый вариант автозаполнения вместе с документацией, как если бы я работал непосредственно с объектом IntWrappers.

Чтобы прояснить, чего я ожидал, на первом снимке экрана ниже показано, что происходит, когда я запрашиваю автозаполнение вектора,Во-вторых, что происходит, когда я обращаюсь к объекту напрямую, и чего я хотел бы достичь, даже используя контейнеры stl.

Expression not found

(Предложениеe, выделенный красным цветом выше, говорит: выражение не найдено )

Working

Есть ли какой-либо плагин (меня не волнует стоимость процессора), чтобы сделать это?

Большое спасибо.

1 Ответ

5 голосов
/ 02 марта 2012

На самом деле, я думаю, что omnicomplete не может справиться с проблемой контекста, поэтому вы не можете использовать его для своих целей.Способ выполнения автозавершения в C ++ / STL - использовать clang_complete (или здесь ).

Хотя производительность кажется довольно проблематичной (посмотрите здесь: Как улучшить скорость завершения clang_complete? ).

Хороший учебник по теме (настроить vim + clang для завершения C ++ STL) можно здесь: http://zwiener.org/vimautocomplete.html

Ссылка:

Примечание: Еще один вариант - использовать gccsense, который является отдельным инструментом, использующим анализаторы кода GCC.Вот ссылка на домашнюю страницу проекта: http://cx4a.org/software/gccsense/ и два SO вопроса о его использовании:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...