Я безуспешно пытался найти ответ на свою проблему, поэтому вот мой вопрос.
Наши классы C ++ определены в нескольких пространствах имен. Поэтому часто члены класса имеют тип, который принадлежит другому пространству имен. В этих случаях функция vommnompletion не работает. Члены STL и локальные переменные могут быть использованы без проблем. Проблема заключается в том, что когда тип переменной члена имеет идентификатор области имен, независимо от того, является ли он собственным пространством имен или другим. :ts tagname
Команда работает всегда.
Маленький глупый пример:
namespace T { namespace N2 {
class Lorry
{
public:
Lorry(){}
void printInfo(){
}
private:
int speed;
};
}}
namespace T { namespace N2 {
class Truck
{
public:
Truck();
void printInfo();
private:
Lorry lorry;
N2::Lorry lorry2;
};
}}
namespace T { namespace N2 {
Truck::Truck(){}
void Truck::printInfo(){
lorry.printInfo(); // Omnicompletion works
lorry2. // Omnicompletion does not work. Pattern not found!
}
}}
Я генерирую файл тегов, используя следующую карту:
map <C-F12> :!ctags -R --c++-kinds=+pl --fields=+iaS --extra=+q --language-force=C++ .<CR>
и некоторые настройки из .vimrc:
let OmniCpp_MayCompleteDot = 1 " autocomplete with .
let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype (i.e. parameters) in popup window
let OmniCpp_LocalSearchDecl = 1 " don't require special style of function opening braces
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
Заранее спасибо