blob: 610526bbea1fb0c46c353d012a129bf29b5b5bee (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
" Description: Omni completion script for cpp files
" Maintainer: Vissale NEANG
" Last Change: 26 sept. 2007
" Check if we can use omni completion in the current buffer
function! s:CanUseOmnicompletion()
" For C and C++ files and only if the omnifunc is omni#cpp#complete#Main
return (index(['c', 'cpp'], &filetype)>=0 && &omnifunc == 'omni#cpp#complete#Main' && !omni#cpp#utils#IsCursorInCommentOrString())
endfunc
" Return the mapping of omni completion
function! omni#cpp#maycomplete#Complete()
let szOmniMapping = "\<C-X>\<C-O>"
" 0 = don't select first item
" 1 = select first item (inserting it to the text, default vim behaviour)
" 2 = select first item (without inserting it to the text)
if g:OmniCpp_SelectFirstItem == 0
" We have to force the menuone option to avoid confusion when there is
" only one popup item
set completeopt-=menu
set completeopt+=menuone
let szOmniMapping .= "\<C-P>"
elseif g:OmniCpp_SelectFirstItem == 2
" We have to force the menuone option to avoid confusion when there is
" only one popup item
set completeopt-=menu
set completeopt+=menuone
let szOmniMapping .= "\<C-P>"
let szOmniMapping .= "\<C-R>=pumvisible() ? \"\\<down>\" : \"\"\<cr>"
endif
return szOmniMapping
endfunc
" May complete function for dot
function! omni#cpp#maycomplete#Dot()
if s:CanUseOmnicompletion() && g:OmniCpp_MayCompleteDot
let g:omni#cpp#items#data = omni#cpp#items#Get(omni#cpp#utils#TokenizeCurrentInstruction('.'))
if len(g:omni#cpp#items#data)
let s:bMayComplete = 1
return '.' . omni#cpp#maycomplete#Complete()
endif
endif
return '.'
endfunc
" May complete function for arrow
function! omni#cpp#maycomplete#Arrow()
if s:CanUseOmnicompletion() && g:OmniCpp_MayCompleteArrow
let index = col('.') - 2
if index >= 0
let char = getline('.')[index]
if char == '-'
let g:omni#cpp#items#data = omni#cpp#items#Get(omni#cpp#utils#TokenizeCurrentInstruction('>'))
if len(g:omni#cpp#items#data)
let s:bMayComplete = 1
return '>' . omni#cpp#maycomplete#Complete()
endif
endif
endif
endif
return '>'
endfunc
" May complete function for double points
function! omni#cpp#maycomplete#Scope()
if s:CanUseOmnicompletion() && g:OmniCpp_MayCompleteScope
let index = col('.') - 2
if index >= 0
let char = getline('.')[index]
if char == ':'
let g:omni#cpp#items#data = omni#cpp#items#Get(omni#cpp#utils#TokenizeCurrentInstruction(':'))
if len(g:omni#cpp#items#data)
if len(g:omni#cpp#items#data[-1].tokens) && g:omni#cpp#items#data[-1].tokens[-1].value != '::'
let s:bMayComplete = 1
return ':' . omni#cpp#maycomplete#Complete()
endif
endif
endif
endif
endif
return ':'
endfunc
|