Похоже, это должно быть возможно: я не уверен, есть ли у меня последняя версия сценария 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 )
" и т. Д.