C++ 如何让omnicppcomplete自动关闭空参数列表?
有没有可能让Vim的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
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']