Я уверен, что вы видели документацию VIM (:help ft-c-omni
) для этого:
При использовании CTRL-X CTRL-O после имени без "." или "->" завершено
из файла тегов напрямую. Это работает для любого идентификатора, а также функции
имена. Если вы хотите заполнить имя локальной переменной, которая не отображается
в файле тегов используйте вместо этого CTRL-P.
При использовании CTRL-X CTRL-O после того, что имеет "." или "->" Vim попытается
распознать тип переменной и выяснить, какие члены у нее есть.
Это означает, что будут перечислены только члены, допустимые для переменной.
Когда имя члена уже было завершено, CTRL-X CTRL-O добавит «.» или же
«->» для составных типов.
Если я правильно прочитал, встроенная функциональность, в лучшем случае, позволит вам использовать только CTRL-P и сопоставлять имена локальных переменных, таким образом полностью обходя файл TAGS.
Что вам действительно нужно, так это файл TAGS, относящийся к единице перевода, над которой вы сейчас работаете (файл header / cpp). Вот шаги, которые я бы выполнил, если бы попытался решить эту проблему:
- Создайте сценарий (или, что еще лучше, включите в make-файл) автоматическое создание файлов TAG, специфичных для единицы перевода.
- Создайте команду в vim, которая выгружает существующие файлы TAGS, перезагружает файл TAGS для конкретного файла и выполняет регулярное
CTRL-X CTRL-O
omni-завершение. При необходимости вернитесь к исходным тегам.
Кроме того, мне кажется, что вы хотели бы иметь возможность вызывать сценарий для # 1 напрямую из VIM, поскольку вы часто меняете текущую единицу перевода при кодировании.
Я надеюсь, что это поможет вам начать в правильном направлении, и я был бы рад видеть / помочь вам с реализацией =).