是否可以让Vim的omnicppcomplete自动关闭不带任何参数的函数或方法的参数列表?
例如,假设v
是STL向量,当自动完成v.clear()
时,我们最终得到:
v.clear(
如果自动添加右括号,那就太好了。这可能吗?
答案 0 :(得分:3)
看起来它应该是可能的:我不确定我是否拥有omnicppcomplete脚本的最新版本,但在我的autoload/omni/cpp/complete.vim
中,有一个名为s: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)let szItemWord .= '('
之后,添加:
if (has_key(tagItem, 'signature') == 0) || (tagItem['signature'] =~ '()')
let szItemWord .= ')'
endif
那个应该做的伎俩(虽然我不太多使用C ++,所以我没有对它进行过广泛的测试)。它基本上检查函数的“签名”是否包含“()
”而不是(例如)“(int *major, int *minor)
”。如果括号为空,则会添加一个右括号。
将完整性更改为'()'
至'(\s*\(void\)\?\s*)'
可能会有所改进:这会检查“()
”,“( )
”,“(void)
“,”( void )
“等等。
答案 1 :(得分:1)
我只是替换第165行:
let szItemWord .= '('
带
let szItemWord .= tagItem['signature']
这样我在代码中获取整个原型而不是函数名,然后我逐个替换参数。