Пространство имен, осведомленное о omnicomplete в vim - PullRequest
2 голосов
/ 19 декабря 2011

Я безуспешно пытался найти ответ на свою проблему, поэтому вот мой вопрос.

Наши классы 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

Заранее спасибо

...