Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何让omnicppcomplete自动关闭空参数列表?_C++_Vim_Omnicppcomplete - Fatal编程技术网

C++ 如何让omnicppcomplete自动关闭空参数列表?

C++ 如何让omnicppcomplete自动关闭空参数列表?,c++,vim,omnicppcomplete,C++,Vim,Omnicppcomplete,有没有可能让Vim的omnicppcomplete自动关闭不带任何参数的函数或方法的参数列表 例如,假设v是STL向量,当自动完成v.clear()时,我们得到: v.clear( 如果能自动添加右括号就好了。这可能吗?看起来应该是可能的:我不确定是否有最新版本的omnicppcomplete脚本,但在我的自动加载/omni/cpp/complete.vim中,有一个名为s:extendedtagitemtopopupItem的函数。在该功能中,有: " Formating informati

有没有可能让Vim的omnicppcomplete自动关闭不带任何参数的函数或方法的参数列表

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

v.clear(

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

看起来应该是可能的:我不确定是否有最新版本的omnicppcomplete脚本,但在我的
自动加载/omni/cpp/complete.vim
中,有一个名为
s:extendedtagitemtopopupItem
的函数。在该功能中,有:

" 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在我的版本中)
之后,让szItemWord.='('
)添加:

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

应该做这个技巧(尽管我不太使用C++,所以我没有广泛地测试它)。它基本上检查函数的“签名”是否包含“<代码>()”/“代码>”,而不是(例如)“代码>(int *,int *)<代码>”。如果括号是空的,则添加一个关闭括号。


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

我只是将第165行替换为:

let szItemWord .= '('


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

谢谢!工作起来很有魅力。我认为这个功能是新的OmniCPMPComplete补丁的一个很好的候选。我会在有时间得到您的许可后开始工作。还有一些改进的空间。我希望在填写方法参数时弹出窗口保持可见。特别是对于较长的参数列表,这会很方便。我同意这会使完成更好。如果您向OmnicpComplete的作者建议这一点,他们可能会提供一些建议(我只是翻了翻,就把上面的问题解决了。)。
let szItemWord .= tagItem['signature']