2009-11-29 2 views

답변

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 .= '(' 후, 추가 : 나는 C를 사용하지 않지만 이 (트릭을 할해야

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

그건 ++ 많이, 그래서 그것을 광범위하게 테스트하지 않았다). 기본적으로 함수의 "서명"이 (예 :) "(int *major, int *minor)"이 아닌 "()"을 포함하는지 확인합니다. 대괄호가 비어 있으면 닫는 중괄호가 추가됩니다.

그것은 아마 완성도 '(\s*\(void\)\?\s*)''()'를 변경하면이 문제를 개선 할 수있다 :이 "()", "()"를 "(void)"을 확인 것 "(void)"등

+0

고마워요! 매력처럼 작동합니다. 나는이 기능이 새로운 omnicppcomplete 패치를위한 좋은 후보라고 생각한다. 나는 당신의 허락하에 시간을 보내고 나서 작업을 시작할 것입니다. 몇 가지 개선의 여지가 있습니다. 메소드 인자를 채울 때 팝업이 보이기를 원합니다. 특히 긴 인수 목록에 대해서는이 것이 유용 할 수 있습니다. –

+0

나는 이것이 완성을 훨씬 좋게한다는 것에 동의한다. 그것은 omnicppcomplete의 저자에게 이것을 제안하면 할 수있는 방법에 대한 제안을 할 수 있습니다 (나는 위에서 파고 들었습니다). – DrAl

1

나는 단지 대신 라인 (165) :

let szItemWord .= tagItem['signature'] 

나는 w를 얻을이 방법으로

let szItemWord .= '(' 

구멍 프로토 타입을 함수 이름 대신 코드에 삽입 한 다음 매개 변수를 하나씩 대체합니다.

관련 문제