vim中的命名空间感知omnicomplete

时间:2011-12-19 18:15:35

标签: c++ vim omnicomplete

我一直试图找到一个没有运气的麻烦的答案,所以这是我的问题。

我们的C ++类在几个名称空间中定义。因此,类成员通常具有属于其他命名空间的类型。对于这些情况,vim的omnicompletion功能不起作用。 STL成员和局部变量可以毫无困难地与omnicompletion一起使用。当成员的变量类型具有命名空间作用域标识符时,问题似乎是,无论它是自己的命名空间还是其他命名空间。 :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

提前致谢

0 个答案:

没有答案