2

是否可以让 Vim 的omnicppcomplete 自动关闭不带任何参数的函数或方法的参数列表?

例如,假设v是一个 STL 向量,当自动完成时v.clear(),我们最终得到:

v.clear(

如果自动添加右括号会很好。这可能吗?

4

2 回答 2

3

看起来应该是可能的:我不确定我是否有最新版本的omnicppcomplete 脚本,但是在我autoload/omni/cpp/complete.vims:ExtendTagItemToPopupItem. 在这个函数中,有:

" Formating information for the preview window
if index(['f', 'p'], tagItem.kind[0])>=0
    let szItemWord .= '('
    if g:OmniCpp_ShowPrototypeInAbbr && has_key(tagItem, 'signature')
        let szAbbr .= tagItem.signature
    else
        let szAbbr .= '('
    endif
endif

在 (#165 in my version) 行之后let szItemWord .= '(',添加:

    if (has_key(tagItem, 'signature') == 0) || (tagItem['signature'] =~ '()')
        let szItemWord .= ')'
    endif

应该可以解决问题(尽管我不怎么使用 C++,所以我没有对它进行广泛的测试)。它基本上检查函数的“签名”是否包含“ ()”而不是(例如)“ (int *major, int *minor)”。如果括号为空,则添加右括号。

它可能会通过更改'()'为来改进'(\s*\(void\)\?\s*)'完整性:这将检查“ ()”、“ ( )”、“ (void)”、“ ( void )”等。

于 2009-11-30T17:46:40.433 回答
1

我只是替换第 165 行:

let szItemWord .= '('

let szItemWord .= tagItem['signature']

这样我在代码中得到了整个原型而不是函数名,然后我一个一个地替换了参数。

于 2011-05-24T11:42:57.860 回答