diff --git a/.vim/after/ftplugin/c.vim b/.vim/after/ftplugin/c.vim deleted file mode 100644 index 66dfc5e..0000000 --- a/.vim/after/ftplugin/c.vim +++ /dev/null @@ -1,2 +0,0 @@ -" OmniCppComplete initialization -call omni#cpp#complete#Init() diff --git a/.vim/after/ftplugin/cpp.vim b/.vim/after/ftplugin/cpp.vim deleted file mode 100644 index 66dfc5e..0000000 --- a/.vim/after/ftplugin/cpp.vim +++ /dev/null @@ -1,2 +0,0 @@ -" OmniCppComplete initialization -call omni#cpp#complete#Init() diff --git a/.vim/autoload/omni/common/debug.vim b/.vim/autoload/omni/common/debug.vim deleted file mode 100644 index eded649..0000000 --- a/.vim/autoload/omni/common/debug.vim +++ /dev/null @@ -1,32 +0,0 @@ -" Description: Omni completion debug functions -" Maintainer: Vissale NEANG -" Last Change: 26 sept. 2007 - -let s:CACHE_DEBUG_TRACE = [] - -" Start debug, clear the debug file -function! omni#common#debug#Start() - let s:CACHE_DEBUG_TRACE = [] - call extend(s:CACHE_DEBUG_TRACE, ['============ Debug Start ============']) - call writefile(s:CACHE_DEBUG_TRACE, "Omni.dbg") -endfunc - -" End debug, write to debug file -function! omni#common#debug#End() - call extend(s:CACHE_DEBUG_TRACE, ["============= Debug End ============="]) - call extend(s:CACHE_DEBUG_TRACE, [""]) - call writefile(s:CACHE_DEBUG_TRACE, "Omni.dbg") -endfunc - -" Debug trace function -function! omni#common#debug#Trace(szFuncName, ...) - let szTrace = a:szFuncName - let paramNum = a:0 - if paramNum>0 - let szTrace .= ':' - endif - for i in range(paramNum) - let szTrace = szTrace .' ('. string(eval('a:'.string(i+1))).')' - endfor - call extend(s:CACHE_DEBUG_TRACE, [szTrace]) -endfunc diff --git a/.vim/autoload/omni/common/utils.vim b/.vim/autoload/omni/common/utils.vim deleted file mode 100644 index c880ad2..0000000 --- a/.vim/autoload/omni/common/utils.vim +++ /dev/null @@ -1,67 +0,0 @@ -" Description: Omni completion utils -" Maintainer: Vissale NEANG -" Last Change: 26 sept. 2007 - -" For sort numbers in list -function! omni#common#utils#CompareNumber(i1, i2) - let num1 = eval(a:i1) - let num2 = eval(a:i2) - return num1 == num2 ? 0 : num1 > num2 ? 1 : -1 -endfunc - -" TagList function calling the vim taglist() with try catch -" The only throwed exception is 'TagList:UserInterrupt' -" We also force the noignorecase option to avoid linear search when calling -" taglist() -function! omni#common#utils#TagList(szTagQuery) - let result = [] - let bUserIgnoreCase = &ignorecase - " Forcing noignorecase search => binary search can be used in taglist() - " if tags in the tag file are sorted - if bUserIgnoreCase - set noignorecase - endif - try - let result = taglist(a:szTagQuery) - catch /^Vim:Interrupt$/ - " Restoring user's setting - if bUserIgnoreCase - set ignorecase - endif - throw 'TagList:UserInterrupt' - catch - "Note: it seems that ctags can generate corrupted files, in this case - "taglist() will fail to read the tagfile and an exception from - "has_add() is thrown - endtry - - " Restoring user's setting - if bUserIgnoreCase - set ignorecase - endif - return result -endfunc - -" Same as TagList but don't throw exception -function! omni#common#utils#TagListNoThrow(szTagQuery) - let result = [] - try - let result = omni#common#utils#TagList(a:szTagQuery) - catch - endtry - return result -endfunc - -" Get the word under the cursor -function! omni#common#utils#GetWordUnderCursor() - let szLine = getline('.') - let startPos = getpos('.')[2]-1 - let startPos = (startPos < 0)? 0 : startPos - if szLine[startPos] =~ '\w' - let startPos = searchpos('\<\w\+', 'cbn', line('.'))[1] - 1 - endif - - let startPos = (startPos < 0)? 0 : startPos - let szResult = matchstr(szLine, '\w\+', startPos) - return szResult -endfunc diff --git a/.vim/autoload/omni/cpp/complete.vim b/.vim/autoload/omni/cpp/complete.vim deleted file mode 100644 index a7e4edc..0000000 --- a/.vim/autoload/omni/cpp/complete.vim +++ /dev/null @@ -1,569 +0,0 @@ -" Description: Omni completion script for cpp files -" Maintainer: Vissale NEANG -" Last Change: 27 sept. 2007 - -if v:version < 700 - echohl WarningMsg - echomsg "omni#cpp#complete.vim: Please install vim 7.0 or higher for omni-completion" - echohl None - finish -endif - -call omni#cpp#settings#Init() -let s:OmniCpp_ShowScopeInAbbr = g:OmniCpp_ShowScopeInAbbr -let s:OmniCpp_ShowPrototypeInAbbr = g:OmniCpp_ShowPrototypeInAbbr -let s:OmniCpp_ShowAccess = g:OmniCpp_ShowAccess -let s:szCurrentWorkingDir = getcwd() - -" Cache data -let s:CACHE_TAG_POPUP_ITEMS = {} -let s:CACHE_TAG_FILES = {} -let s:CACHE_TAG_ENV = '' -let s:CACHE_OVERLOADED_FUNCTIONS = {} - -" Has preview window? -let s:hasPreviewWindow = match(&completeopt, 'preview')>=0 -let s:hasPreviewWindowOld = s:hasPreviewWindow - -" Popup item list -let s:popupItemResultList = [] - -" May complete indicator -let s:bMayComplete = 0 - -" Init mappings -function! omni#cpp#complete#Init() - call omni#cpp#settings#Init() - set omnifunc=omni#cpp#complete#Main - inoremap omni#cpp#maycomplete#Complete() - inoremap . omni#cpp#maycomplete#Dot() - inoremap > omni#cpp#maycomplete#Arrow() - inoremap : omni#cpp#maycomplete#Scope() -endfunc - -" Find the start position of the completion -function! s:FindStartPositionOfCompletion() - " Locate the start of the item, including ".", "->" and "[...]". - let line = getline('.') - let start = col('.') - 1 - - let lastword = -1 - while start > 0 - if line[start - 1] =~ '\w' - let start -= 1 - elseif line[start - 1] =~ '\.' - " Searching for dot '.' - if lastword == -1 - let lastword = start - endif - let start -= 1 - elseif start > 1 && line[start - 2] == '-' && line[start - 1] == '>' - " Searching for '->' - if lastword == -1 - let lastword = start - endif - let start -= 2 - elseif start > 1 && line[start - 2] == ':' && line[start - 1] == ':' - " Searching for '::' for namespaces and class - if lastword == -1 - let lastword = start - endif - let start -= 2 - elseif line[start - 1] == ']' - " Skip over [...]. - let n = 0 - let start -= 1 - while start > 0 - let start -= 1 - if line[start] == '[' - if n == 0 - break - endif - let n -= 1 - elseif line[start] == ']' " nested [] - let n += 1 - endif - endwhile - else - break - endif - endwhile - if lastword==-1 - " For completion on the current scope - let lastword = start - endif - return lastword -endfunc - -" Returns if szKey1.szKey2 is in the cache -" @return -" - 0 = key not found -" - 1 = szKey1.szKey2 found -" - 2 = szKey1.[part of szKey2] found -function! s:IsCached(cache, szKey1, szKey2) - " Searching key in the result cache - let szResultKey = a:szKey1 . a:szKey2 - let result = [0, szResultKey] - if a:szKey2 != '' - let szKey = a:szKey2 - while len(szKey)>0 - if has_key(a:cache, a:szKey1 . szKey) - let result[1] = a:szKey1 . szKey - if szKey != a:szKey2 - let result[0] = 2 - else - let result[0] = 1 - endif - break - endif - let szKey = szKey[:-2] - endwhile - else - if has_key(a:cache, szResultKey) - let result[0] = 1 - endif - endif - return result -endfunc - -" Extend a tag item to a popup item -function! s:ExtendTagItemToPopupItem(tagItem, szTypeName) - let tagItem = a:tagItem - - " Add the access - let szItemMenu = '' - let accessChar = {'public': '+','protected': '#','private': '-'} - if g:OmniCpp_ShowAccess - if has_key(tagItem, 'access') && has_key(accessChar, tagItem.access) - let szItemMenu = szItemMenu.accessChar[tagItem.access] - else - let szItemMenu = szItemMenu." " - endif - endif - - " Formating optional menu string we extract the scope information - let szName = substitute(tagItem.name, '.*::', '', 'g') - let szItemWord = szName - let szAbbr = szName - - if !g:OmniCpp_ShowScopeInAbbr - let szScopeOfTag = omni#cpp#utils#ExtractScope(tagItem) - let szItemMenu = szItemMenu.' '.szScopeOfTag[2:] - let szItemMenu = substitute(szItemMenu, '\s\+$', '', 'g') - else - let szAbbr = tagItem.name - endif - if g:OmniCpp_ShowAccess - let szItemMenu = substitute(szItemMenu, '^\s\+$', '', 'g') - else - let szItemMenu = substitute(szItemMenu, '\(^\s\+\)\|\(\s\+$\)', '', 'g') - endif - - " 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 - let szItemInfo = '' - if s:hasPreviewWindow - let szItemInfo = omni#cpp#utils#GetPreviewWindowStringFromTagItem(tagItem) - endif - - " If a function is a ctor we add a new key in the tagItem - if index(['f', 'p'], tagItem.kind[0])>=0 - if match(szName, '^\~') < 0 && a:szTypeName =~ '\C\<'.szName.'$' - " It's a ctor - let tagItem['ctor'] = 1 - elseif has_key(tagItem, 'access') && tagItem.access == 'friend' - " Friend function - let tagItem['friendfunc'] = 1 - endif - endif - - " Extending the tag item to a popup item - let tagItem['word'] = szItemWord - let tagItem['abbr'] = szAbbr - let tagItem['menu'] = szItemMenu - let tagItem['info'] = szItemInfo - let tagItem['dup'] = (s:hasPreviewWindow && index(['f', 'p', 'm'], tagItem.kind[0])>=0) - return tagItem -endfunc - -" Get tag popup item list -function! s:TagPopupList(szTypeName, szBase) - let result = [] - - " Searching key in the result cache - let cacheResult = s:IsCached(s:CACHE_TAG_POPUP_ITEMS, a:szTypeName, a:szBase) - - " Building the tag query, we don't forget dtors when a:szBase=='' - if a:szTypeName!='' - " Scope search - let szTagQuery = '^' . a:szTypeName . '::' . a:szBase . '\~\?\w\+$' - else - " Global search - let szTagQuery = '^' . a:szBase . '\w\+$' - endif - - " If the result is already in the cache we return it - if cacheResult[0] - let result = s:CACHE_TAG_POPUP_ITEMS[ cacheResult[1] ] - if cacheResult[0] == 2 - let result = filter(copy(result), 'v:val.name =~ szTagQuery' ) - endif - return result - endif - - try - " Getting tags - let result = omni#common#utils#TagList(szTagQuery) - - " We extend tag items to popup items - call map(result, 's:ExtendTagItemToPopupItem(v:val, a:szTypeName)') - - " We store the result in a cache - if cacheResult[1] != '' - let s:CACHE_TAG_POPUP_ITEMS[ cacheResult[1] ] = result - endif - catch /^TagList:UserInterrupt$/ - endtry - - return result -endfunc - -" Find complete matches for a completion on the global scope -function! s:SearchGlobalMembers(szBase) - if a:szBase != '' - let tagPopupList = s:TagPopupList('', a:szBase) - let tagPopupList = filter(copy(tagPopupList), g:omni#cpp#utils#szFilterGlobalScope) - call extend(s:popupItemResultList, tagPopupList) - endif -endfunc - -" Search class, struct, union members -" @param resolvedTagItem: a resolved tag item -" @param szBase: string base -" @return list of tag items extended to popup items -function! s:SearchMembers(resolvedTagItem, szBase) - let result = [] - if a:resolvedTagItem == {} - return result - endif - - " Get type info without the starting '::' - let szTagName = omni#cpp#utils#ExtractTypeInfoFromTag(a:resolvedTagItem)[2:] - - " Unnamed type case. A tag item representing an unnamed type is a variable - " ('v') a member ('m') or a typedef ('t') - if index(['v', 't', 'm'], a:resolvedTagItem.kind[0])>=0 && has_key(a:resolvedTagItem, 'typeref') - " We remove the 'struct:' or 'class:' etc... - let szTagName = substitute(a:resolvedTagItem.typeref, '^\w\+:', '', 'g') - endif - - return copy(s:TagPopupList(szTagName, a:szBase)) -endfunc - -" Return if the tag env has changed -function! s:HasTagEnvChanged() - if s:CACHE_TAG_ENV == &tags - return 0 - else - let s:CACHE_TAG_ENV = &tags - return 1 - endif -endfunc - -" Return if a tag file has changed in tagfiles() -function! s:HasATagFileOrTagEnvChanged() - if s:HasTagEnvChanged() - let s:CACHE_TAG_FILES = {} - return 1 - endif - - let result = 0 - for tagFile in tagfiles() - if tagFile == "" - continue - endif - - if has_key(s:CACHE_TAG_FILES, tagFile) - let currentFiletime = getftime(tagFile) - if currentFiletime > s:CACHE_TAG_FILES[tagFile] - " The file has changed, updating the cache - let s:CACHE_TAG_FILES[tagFile] = currentFiletime - let result = 1 - endif - else - " We store the time of the file - let s:CACHE_TAG_FILES[tagFile] = getftime(tagFile) - let result = 1 - endif - endfor - return result -endfunc -" Initialization -call s:HasATagFileOrTagEnvChanged() - -" Filter same function signatures of base classes -function! s:FilterOverloadedFunctions(tagPopupList) - let result = [] - for tagPopupItem in a:tagPopupList - if has_key(tagPopupItem, 'kind') && index(['f', 'p'], tagPopupItem.kind[0])>=0 && has_key(tagPopupItem, 'signature') - if !has_key(s:CACHE_OVERLOADED_FUNCTIONS, tagPopupItem.word . tagPopupItem.signature) - let s:CACHE_OVERLOADED_FUNCTIONS[tagPopupItem.word . tagPopupItem.signature] = 1 - call extend(result, [tagPopupItem]) - endif - else - call extend(result, [tagPopupItem]) - endif - endfor - return result -endfunc - -" Access filter -function! s:GetAccessFilter(szFilter, szAccessFilter) - let szFilter = a:szFilter - if g:OmniCpp_DisplayMode == 0 - if a:szAccessFilter == 'public' - " We only get public members - let szFilter .= "&& v:val.access == 'public'" - elseif a:szAccessFilter == 'protected' - " We get public and protected members - let szFilter .= "&& v:val.access != 'private'" - endif - endif - return szFilter -endfunc - -" Filter class members in the popup menu after a completion with -> or . -function! s:FilterClassMembers(tagPopupList, szAccessFilter) - let szFilter = "(!has_key(v:val, 'friendfunc') && !has_key(v:val, 'ctor') && has_key(v:val, 'kind') && index(['m', 'p', 'f'], v:val.kind[0])>=0 && has_key(v:val, 'access'))" - call filter(a:tagPopupList, s:GetAccessFilter(szFilter, a:szAccessFilter)) - call extend(s:popupItemResultList, s:FilterOverloadedFunctions(a:tagPopupList)) -endfunc - -" Filter class scope members in the popup menu after a completion with :: -" We only display attribute and functions members that -" have an access information. We also display nested -" class, struct, union, and enums, typedefs -function! s:FilterClassScopeMembers(tagPopupList, szAccessFilter) - let szFilter = "!has_key(v:val, 'friendfunc') && has_key(v:val, 'kind') && (index(['m', 'p', 'f'], v:val.kind[0])>=0 && has_key(v:val, 'access'))" - let szFilter = s:GetAccessFilter(szFilter, a:szAccessFilter) - let szFilter .= "|| index(['c','e','g','s','t','u'], v:val.kind[0])>=0" - call filter(a:tagPopupList, szFilter) - call extend(s:popupItemResultList, s:FilterOverloadedFunctions(a:tagPopupList)) -endfunc - -" Filter static class members in the popup menu -function! s:FilterStaticClassMembers(tagPopupList, szAccessFilter) - let szFilter = "!has_key(v:val, 'friendfunc') && has_key(v:val, 'kind') && (index(['m', 'p', 'f'], v:val.kind[0])>=0 && has_key(v:val, 'access') && match(v:val.cmd, '\\Cstatic')!=-1)" - let szFilter = s:GetAccessFilter(szFilter, a:szAccessFilter) - let szFilter = szFilter . "|| index(['c','e','g','n','s','t','u','v'], v:val.kind[0])>=0" - call filter(a:tagPopupList, szFilter) - call extend(s:popupItemResultList, s:FilterOverloadedFunctions(a:tagPopupList)) -endfunc - -" Filter scope members in the popup menu -function! s:FilterNamespaceScopeMembers(tagPopupList) - call extend(s:popupItemResultList, a:tagPopupList) -endfunc - -" Init data at the start of completion -function! s:InitComplete() - " Reset the popup item list - let s:popupItemResultList = [] - let s:CACHE_OVERLOADED_FUNCTIONS = {} - - " Reset includes cache when the current working directory has changed - let szCurrentWorkingDir = getcwd() - if s:szCurrentWorkingDir != szCurrentWorkingDir - let s:szCurrentWorkingDir = szCurrentWorkingDir - let g:omni#cpp#includes#CACHE_INCLUDES = {} - let g:omni#cpp#includes#CACHE_FILE_TIME = {} - endif - - " Has preview window ? - let s:hasPreviewWindow = match(&completeopt, 'preview')>=0 - - let bResetCache = 0 - - " Reset tag env or tag files dependent caches - if s:HasATagFileOrTagEnvChanged() - let bResetCache = 1 - endif - - if (s:OmniCpp_ShowScopeInAbbr != g:OmniCpp_ShowScopeInAbbr) - \|| (s:OmniCpp_ShowPrototypeInAbbr != g:OmniCpp_ShowPrototypeInAbbr) - \|| (s:OmniCpp_ShowAccess != g:OmniCpp_ShowAccess) - - let s:OmniCpp_ShowScopeInAbbr = g:OmniCpp_ShowScopeInAbbr - let s:OmniCpp_ShowPrototypeInAbbr = g:OmniCpp_ShowPrototypeInAbbr - let s:OmniCpp_ShowAccess = g:OmniCpp_ShowAccess - let bResetCache = 1 - endif - - if s:hasPreviewWindow != s:hasPreviewWindowOld - let s:hasPreviewWindowOld = s:hasPreviewWindow - let bResetCache = 1 - endif - - if bResetCache - let g:omni#cpp#namespaces#CacheResolve = {} - let s:CACHE_TAG_POPUP_ITEMS = {} - let g:omni#cpp#utils#CACHE_TAG_INHERITS = {} - call garbagecollect() - endif - - " Check for updates - for szIncludeName in keys(g:omni#cpp#includes#CACHE_INCLUDES) - let fTime = getftime(szIncludeName) - let bNeedUpdate = 0 - if has_key(g:omni#cpp#includes#CACHE_FILE_TIME, szIncludeName) - if fTime != g:omni#cpp#includes#CACHE_FILE_TIME[szIncludeName] - let bNeedUpdate = 1 - endif - else - let g:omni#cpp#includes#CACHE_FILE_TIME[szIncludeName] = fTime - let bNeedUpdate = 1 - endif - - if bNeedUpdate - " We have to update include list and namespace map of this file - call omni#cpp#includes#GetList(szIncludeName, 1) - call omni#cpp#namespaces#GetMapFromBuffer(szIncludeName, 1) - endif - endfor - - let s:bDoNotComplete = 0 -endfunc - - -" This function is used for the 'omnifunc' option. -function! omni#cpp#complete#Main(findstart, base) - if a:findstart - "call omni#common#debug#Start() - - call s:InitComplete() - - " Note: if s:bMayComplete==1 g:omni#cpp#items#data is build by MayComplete functions - if !s:bMayComplete - " If the cursor is in a comment we go out - if omni#cpp#utils#IsCursorInCommentOrString() - " Returning -1 is not enough we have to set a variable to let - " the second call of omni#cpp#complete knows that the - " cursor was in a comment - " Why is there a second call when the first call returns -1 ? - let s:bDoNotComplete = 1 - return -1 - endif - - " We get items here (whend a:findstart==1) because GetItemsToComplete() - " depends on the cursor position. - " When a:findstart==0 the cursor position is modified - let g:omni#cpp#items#data = omni#cpp#items#Get(omni#cpp#utils#TokenizeCurrentInstruction()) - endif - - " Get contexts stack - let s:contextStack = omni#cpp#namespaces#GetContexts() - - " Reinit of may complete indicator - let s:bMayComplete = 0 - return s:FindStartPositionOfCompletion() - endif - - " If the cursor is in a comment we return an empty result - if s:bDoNotComplete - let s:bDoNotComplete = 0 - return [] - endif - - if len(g:omni#cpp#items#data)==0 - " A) CURRENT_SCOPE_COMPLETION_MODE - - " 1) Displaying data of each context - let szAccessFilter = 'all' - for szCurrentContext in s:contextStack - if szCurrentContext == '::' - continue - endif - - let resolvedTagItem = omni#cpp#utils#GetResolvedTagItem(s:contextStack, omni#cpp#utils#CreateTypeInfo(szCurrentContext)) - if resolvedTagItem != {} - " We don't search base classes because bases classes are - " already in the context stack - let tagPopupList = s:SearchMembers(resolvedTagItem, a:base) - if index(['c','s'], resolvedTagItem.kind[0])>=0 - " It's a class or struct - call s:FilterClassScopeMembers(tagPopupList, szAccessFilter) - let szAccessFilter = 'protected' - else - " It's a namespace or union, we display all members - call s:FilterNamespaceScopeMembers(tagPopupList) - endif - endif - endfor - - " 2) Displaying global scope members - if g:OmniCpp_GlobalScopeSearch - call s:SearchGlobalMembers(a:base) - endif - else - let typeInfo = omni#cpp#items#ResolveItemsTypeInfo(s:contextStack, g:omni#cpp#items#data) - - if typeInfo != {} - if g:omni#cpp#items#data[-1].kind == 'itemScope' - " B) SCOPE_COMPLETION_MODE - if omni#cpp#utils#GetTypeInfoString(typeInfo)=='' - call s:SearchGlobalMembers(a:base) - else - for resolvedTagItem in omni#cpp#utils#GetResolvedTags(s:contextStack, typeInfo) - let tagPopupList = s:SearchMembers(resolvedTagItem, a:base) - if index(['c','s'], resolvedTagItem.kind[0])>=0 - let szTypeInfo = omni#cpp#utils#ExtractTypeInfoFromTag(resolvedTagItem) - if g:OmniCpp_DisplayMode==0 - " We want to complete a class or struct - " If this class is a base class so we display all class members - if index(s:contextStack, szTypeInfo)<0 - let szAccessFilter = 'public' - call s:FilterStaticClassMembers(tagPopupList, szAccessFilter) - else - let szAccessFilter = (s:contextStack[0] == szTypeInfo)? 'all' : 'protected' - call s:FilterClassScopeMembers(tagPopupList, szAccessFilter) - endif - else - if index(s:contextStack, szTypeInfo)<0 - let szAccessFilter = 'public' - else - let szAccessFilter = (s:contextStack[0] == szTypeInfo)? 'all' : 'protected' - endif - call s:FilterClassScopeMembers(tagPopupList, szAccessFilter) - endif - else - " We want to complete a namespace - call s:FilterNamespaceScopeMembers(tagPopupList) - endif - endfor - endif - else - " C) CLASS_MEMBERS_COMPLETION_MODE - for resolvedTagItem in omni#cpp#utils#GetResolvedTags(s:contextStack, typeInfo) - let szTypeInfo = omni#cpp#utils#ExtractTypeInfoFromTag(resolvedTagItem) - if index(s:contextStack, szTypeInfo)<0 - let szAccessFilter = 'public' - else - let szAccessFilter = (s:contextStack[0] == szTypeInfo)? 'all' : 'protected' - endif - call s:FilterClassMembers(s:SearchMembers(resolvedTagItem, a:base), szAccessFilter) - endfor - endif - endif - endif - - "call omni#common#debug#End() - - return s:popupItemResultList -endfunc diff --git a/.vim/autoload/omni/cpp/includes.vim b/.vim/autoload/omni/cpp/includes.vim deleted file mode 100644 index 10a89bc..0000000 --- a/.vim/autoload/omni/cpp/includes.vim +++ /dev/null @@ -1,126 +0,0 @@ -" Description: Omni completion script for cpp files -" Maintainer: Vissale NEANG -" Last Change: 26 sept. 2007 - -let g:omni#cpp#includes#CACHE_INCLUDES = {} -let g:omni#cpp#includes#CACHE_FILE_TIME = {} - -let s:rePreprocIncludePart = '\C#\s*include\s*' -let s:reIncludeFilePart = '\(<\|"\)\(\f\|\s\)\+\(>\|"\)' -let s:rePreprocIncludeFile = s:rePreprocIncludePart . s:reIncludeFilePart - -" Get the include list of a file -function! omni#cpp#includes#GetList(...) - if a:0 > 0 - return s:GetIncludeListFromFile(a:1, (a:0 > 1)? a:2 : 0 ) - else - return s:GetIncludeListFromCurrentBuffer() - endif -endfunc - -" Get the include list from the current buffer -function! s:GetIncludeListFromCurrentBuffer() - let listIncludes = [] - let originalPos = getpos('.') - - call setpos('.', [0, 1, 1, 0]) - let curPos = [1,1] - let alreadyInclude = {} - while curPos != [0,0] - let curPos = searchpos('\C\(^'.s:rePreprocIncludeFile.'\)', 'W') - if curPos != [0,0] - let szLine = getline('.') - let startPos = curPos[1] - let endPos = matchend(szLine, s:reIncludeFilePart, startPos-1) - if endPos!=-1 - let szInclusion = szLine[startPos-1:endPos-1] - let szIncludeFile = substitute(szInclusion, '\('.s:rePreprocIncludePart.'\)\|[<>""]', '', 'g') - let szResolvedInclude = omni#cpp#utils#ResolveFilePath(szIncludeFile) - - " Protection over self inclusion - if szResolvedInclude != '' && szResolvedInclude != omni#cpp#utils#ResolveFilePath(getreg('%')) - let includePos = curPos - if !has_key(alreadyInclude, szResolvedInclude) - call extend(listIncludes, [{'pos' : includePos, 'include' : szResolvedInclude}]) - let alreadyInclude[szResolvedInclude] = 1 - endif - endif - endif - endif - endwhile - - call setpos('.', originalPos) - return listIncludes -endfunc - -" Get the include list from a file -function! s:GetIncludeListFromFile(szFilePath, bUpdate) - let listIncludes = [] - if a:szFilePath == '' - return listIncludes - endif - - if !a:bUpdate && has_key(g:omni#cpp#includes#CACHE_INCLUDES, a:szFilePath) - return copy(g:omni#cpp#includes#CACHE_INCLUDES[a:szFilePath]) - endif - - let g:omni#cpp#includes#CACHE_FILE_TIME[a:szFilePath] = getftime(a:szFilePath) - - let szFixedPath = escape(a:szFilePath, g:omni#cpp#utils#szEscapedCharacters) - execute 'silent! lvimgrep /\C\(^'.s:rePreprocIncludeFile.'\)/gj '.szFixedPath - - let listQuickFix = getloclist(0) - let alreadyInclude = {} - for qf in listQuickFix - let szLine = qf.text - let startPos = qf.col - let endPos = matchend(szLine, s:reIncludeFilePart, startPos-1) - if endPos!=-1 - let szInclusion = szLine[startPos-1:endPos-1] - let szIncludeFile = substitute(szInclusion, '\('.s:rePreprocIncludePart.'\)\|[<>""]', '', 'g') - let szResolvedInclude = omni#cpp#utils#ResolveFilePath(szIncludeFile) - - " Protection over self inclusion - if szResolvedInclude != '' && szResolvedInclude != a:szFilePath - let includePos = [qf.lnum, qf.col] - if !has_key(alreadyInclude, szResolvedInclude) - call extend(listIncludes, [{'pos' : includePos, 'include' : szResolvedInclude}]) - let alreadyInclude[szResolvedInclude] = 1 - endif - endif - endif - endfor - - let g:omni#cpp#includes#CACHE_INCLUDES[a:szFilePath] = listIncludes - - return copy(listIncludes) -endfunc - -" For debug purpose -function! omni#cpp#includes#Display() - let szPathBuffer = omni#cpp#utils#ResolveFilePath(getreg('%')) - call s:DisplayIncludeTree(szPathBuffer, 0) -endfunc - -" For debug purpose -function! s:DisplayIncludeTree(szFilePath, indent, ...) - let includeGuard = {} - if a:0 >0 - let includeGuard = a:1 - endif - let szFilePath = omni#cpp#utils#ResolveFilePath(a:szFilePath) - if has_key(includeGuard, szFilePath) - return - else - let includeGuard[szFilePath] = 1 - endif - - let szIndent = repeat(' ', a:indent) - echo szIndent . a:szFilePath - let incList = omni#cpp#includes#GetList(a:szFilePath) - for inc in incList - call s:DisplayIncludeTree(inc.include, a:indent+1, includeGuard) - endfor -endfunc - - diff --git a/.vim/autoload/omni/cpp/items.vim b/.vim/autoload/omni/cpp/items.vim deleted file mode 100644 index b943ad4..0000000 --- a/.vim/autoload/omni/cpp/items.vim +++ /dev/null @@ -1,660 +0,0 @@ -" Description: Omni completion script for cpp files -" Maintainer: Vissale NEANG -" Last Change: 26 sept. 2007 - -" Build the item list of an instruction -" An item is an instruction between a -> or . or ->* or .* -" We can sort an item in different kinds: -" eg: ((MyClass1*)(pObject))->_memberOfClass1.get() ->show() -" | cast | | member | | method | | method | -" @return a list of item -" an item is a dictionnary where keys are: -" tokens = list of token -" kind = itemVariable|itemCast|itemCppCast|itemTemplate|itemFunction|itemUnknown|itemThis|itemScope -function! omni#cpp#items#Get(tokens, ...) - let bGetWordUnderCursor = (a:0>0)? a:1 : 0 - - let result = [] - let itemsDelimiters = ['->', '.', '->*', '.*'] - - let tokens = reverse(omni#cpp#utils#BuildParenthesisGroups(a:tokens)) - - " fsm states: - " 0 = initial state - " TODO: add description of fsm states - let state=(bGetWordUnderCursor)? 1 : 0 - let item = {'tokens' : [], 'kind' : 'itemUnknown'} - let parenGroup=-1 - for token in tokens - if state==0 - if index(itemsDelimiters, token.value)>=0 - let item = {'tokens' : [], 'kind' : 'itemUnknown'} - let state = 1 - elseif token.value=='::' - let state = 9 - let item.kind = 'itemScope' - " Maybe end of tokens - elseif token.kind =='cppOperatorPunctuator' - " If it's a cppOperatorPunctuator and the current token is not - " a itemsDelimiters or '::' we can exit - let state=-1 - break - endif - elseif state==1 - call insert(item.tokens, token) - if token.kind=='cppWord' - " It's an attribute member or a variable - let item.kind = 'itemVariable' - let state = 2 - " Maybe end of tokens - elseif token.value=='this' - let item.kind = 'itemThis' - let state = 2 - " Maybe end of tokens - elseif token.value==')' - let parenGroup = token.group - let state = 3 - elseif token.value==']' - let parenGroup = token.group - let state = 4 - elseif token.kind == 'cppDigit' - let state = -1 - break - endif - elseif state==2 - if index(itemsDelimiters, token.value)>=0 - call insert(result, item) - let item = {'tokens' : [], 'kind' : 'itemUnknown'} - let state = 1 - elseif token.value == '::' - call insert(item.tokens, token) - " We have to get namespace or classscope - let state = 8 - " Maybe end of tokens - else - call insert(result, item) - let state=-1 - break - endif - elseif state==3 - call insert(item.tokens, token) - if token.value=='(' && token.group == parenGroup - let state = 5 - " Maybe end of tokens - endif - elseif state==4 - call insert(item.tokens, token) - if token.value=='[' && token.group == parenGroup - let state = 1 - endif - elseif state==5 - if token.kind=='cppWord' - " It's a function or method - let item.kind = 'itemFunction' - call insert(item.tokens, token) - let state = 2 - " Maybe end of tokens - elseif token.value == '>' - " Maybe a cpp cast or template - let item.kind = 'itemTemplate' - call insert(item.tokens, token) - let parenGroup = token.group - let state = 6 - else - " Perhaps it's a C cast eg: ((void*)(pData)) or a variable eg:(*pData) - let item.kind = omni#cpp#utils#GetCastType(item.tokens) - let state=-1 - call insert(result, item) - break - endif - elseif state==6 - call insert(item.tokens, token) - if token.value == '<' && token.group == parenGroup - " Maybe a cpp cast or template - let state = 7 - endif - elseif state==7 - call insert(item.tokens, token) - if token.kind=='cppKeyword' - " It's a cpp cast - let item.kind = omni#cpp#utils#GetCastType(item.tokens) - let state=-1 - call insert(result, item) - break - else - " Template ? - let state=-1 - call insert(result, item) - break - endif - elseif state==8 - if token.kind=='cppWord' - call insert(item.tokens, token) - let state = 2 - " Maybe end of tokens - else - let state=-1 - call insert(result, item) - break - endif - elseif state==9 - if token.kind == 'cppWord' - call insert(item.tokens, token) - let state = 10 - " Maybe end of tokens - else - let state=-1 - call insert(result, item) - break - endif - elseif state==10 - if token.value == '::' - call insert(item.tokens, token) - let state = 9 - " Maybe end of tokens - else - let state=-1 - call insert(result, item) - break - endif - endif - endfor - - if index([2, 5, 8, 9, 10], state)>=0 - if state==5 - let item.kind = omni#cpp#utils#GetCastType(item.tokens) - endif - call insert(result, item) - endif - - return result -endfunc - -" Resolve type information of items -" @param namespaces: list of namespaces used in the file -" @param szCurrentClassScope: the current class scope, only used for the first -" item to detect if this item is a class member (attribute, method) -" @param items: list of item, can be an empty list @see GetItemsToComplete -function! omni#cpp#items#ResolveItemsTypeInfo(contextStack, items) - " Note: kind = itemVariable|cCast|cppCast|template|function|itemUnknown|this - " For the first item, if it's a variable we try to detect the type of the - " variable with the function searchdecl. If it fails, thanks to the - " current class scope, we try to detect if the variable is an attribute - " member. - " If the kind of the item is a function, we have to first check if the - " function is a method of the class, if it fails we try to get a match in - " the global namespace. After that we get the returned type of the - " function. - " It the kind is a C cast or C++ cast, there is no problem, it's the - " easiest case. We just extract the type of the cast. - - let szCurrentContext = '' - let typeInfo = {} - " Note: We search the decl only for the first item - let bSearchDecl = 1 - for item in a:items - let curItem = item - if index(['itemVariable', 'itemFunction'], curItem.kind)>=0 - " Note: a variable can be : MyNs::MyClass::_var or _var or (*pVar) - " or _var[0][0] - let szSymbol = s:GetSymbol(curItem.tokens) - - " If we have MyNamespace::myVar - " We add MyNamespace in the context stack set szSymbol to myVar - if match(szSymbol, '::\w\+$') >= 0 - let szCurrentContext = substitute(szSymbol, '::\w\+$', '', 'g') - let szSymbol = matchstr(szSymbol, '\w\+$') - endif - let tmpContextStack = a:contextStack - if szCurrentContext != '' - let tmpContextStack = [szCurrentContext] + a:contextStack - endif - - if curItem.kind == 'itemVariable' - let typeInfo = s:GetTypeInfoOfVariable(tmpContextStack, szSymbol, bSearchDecl) - else - let typeInfo = s:GetTypeInfoOfReturnedType(tmpContextStack, szSymbol) - endif - - elseif curItem.kind == 'itemThis' - if len(a:contextStack) - let typeInfo = omni#cpp#utils#CreateTypeInfo(substitute(a:contextStack[0], '^::', '', 'g')) - endif - elseif curItem.kind == 'itemCast' - let typeInfo = omni#cpp#utils#CreateTypeInfo(s:ResolveCCast(curItem.tokens)) - elseif curItem.kind == 'itemCppCast' - let typeInfo = omni#cpp#utils#CreateTypeInfo(s:ResolveCppCast(curItem.tokens)) - elseif curItem.kind == 'itemScope' - let typeInfo = omni#cpp#utils#CreateTypeInfo(substitute(s:TokensToString(curItem.tokens), '\s', '', 'g')) - endif - - if omni#cpp#utils#IsTypeInfoValid(typeInfo) - let szCurrentContext = omni#cpp#utils#GetTypeInfoString(typeInfo) - endif - let bSearchDecl = 0 - endfor - - return typeInfo -endfunc - -" Get symbol name -function! s:GetSymbol(tokens) - let szSymbol = '' - let state = 0 - for token in a:tokens - if state == 0 - if token.value == '::' - let szSymbol .= token.value - let state = 1 - elseif token.kind == 'cppWord' - let szSymbol .= token.value - let state = 2 - " Maybe end of token - endif - elseif state == 1 - if token.kind == 'cppWord' - let szSymbol .= token.value - let state = 2 - " Maybe end of token - else - " Error - break - endif - elseif state == 2 - if token.value == '::' - let szSymbol .= token.value - let state = 1 - else - break - endif - endif - endfor - return szSymbol -endfunc - -" Search a declaration. -" eg: std::map -" can be empty -" Note: The returned type info can be a typedef -" The typedef resolution is done later -" @return -" - a dictionnary where keys are -" - type: the type of value same as type() -" - value: the value -function! s:GetTypeInfoOfVariable(contextStack, szVariable, bSearchDecl) - let result = {} - - if a:bSearchDecl - " Search type of declaration - "let result = s:SearchTypeInfoOfDecl(a:szVariable) - let result = s:SearchDecl(a:szVariable) - endif - - if result=={} - let szFilter = "index(['m', 'v'], v:val.kind[0])>=0" - let tagItem = s:ResolveSymbol(a:contextStack, a:szVariable, szFilter) - if tagItem=={} - return result - endif - - let szCmdWithoutVariable = substitute(omni#cpp#utils#ExtractCmdFromTagItem(tagItem), '\C\<'.a:szVariable.'\>.*', '', 'g') - let tokens = omni#cpp#tokenizer#Tokenize(omni#cpp#utils#GetCodeFromLine(szCmdWithoutVariable)) - let result = omni#cpp#utils#CreateTypeInfo(omni#cpp#utils#ExtractTypeInfoFromTokens(tokens)) - " TODO: Namespace resolution for result - - if result != {} && result.value=='' - " result.value=='' - " eg: - " struct - " { - " }gVariable; - if has_key(tagItem, 'typeref') - " Maybe the variable is a global var of an - " unnamed class, struct or union. - " eg: - " 1) - " struct - " { - " }gVariable; - " In this case we need the tags (the patched version) - " Note: We can have a named type like this: - " 2) - " class A - " { - " }gVariable; - if s:IsUnnamedType(tagItem) - " It's an unnamed type we are in the case 1) - let result = omni#cpp#utils#CreateTypeInfo(tagItem) - else - " It's not an unnamed type we are in the case 2) - - " eg: tagItem.typeref = 'struct:MY_STRUCT::MY_SUBSTRUCT' - let szTypeRef = substitute(tagItem.typeref, '^\w\+:', '', '') - - " eg: szTypeRef = 'MY_STRUCT::MY_SUBSTRUCT' - let result = omni#cpp#utils#CreateTypeInfo(szTypeRef) - endif - endif - endif - endif - return result -endfunc - -" Get the type info string from the returned type of function -function! s:GetTypeInfoOfReturnedType(contextStack, szFunctionName) - let result = {} - - let szFilter = "index(['f', 'p'], v:val.kind[0])>=0" - let tagItem = s:ResolveSymbol(a:contextStack, a:szFunctionName, szFilter) - - if tagItem != {} - let szCmdWithoutVariable = substitute(omni#cpp#utils#ExtractCmdFromTagItem(tagItem), '\C\<'.a:szFunctionName.'\>.*', '', 'g') - let tokens = omni#cpp#tokenizer#Tokenize(omni#cpp#utils#GetCodeFromLine(szCmdWithoutVariable)) - let result = omni#cpp#utils#CreateTypeInfo(omni#cpp#utils#ExtractTypeInfoFromTokens(tokens)) - " TODO: Namespace resolution for result - return result - endif - return result -endfunc - -" Resolve a symbol, return a tagItem -" Gets the first symbol found in the context stack -function! s:ResolveSymbol(contextStack, szSymbol, szTagFilter) - let tagItem = {} - for szCurrentContext in a:contextStack - if szCurrentContext != '::' - let szTagQuery = substitute(szCurrentContext, '^::', '', 'g').'::'.a:szSymbol - else - let szTagQuery = a:szSymbol - endif - - let tagList = omni#common#utils#TagListNoThrow('^'.szTagQuery.'$') - call filter(tagList, a:szTagFilter) - if len(tagList) - let tagItem = tagList[0] - break - endif - endfor - return tagItem -endfunc - -" Return if the tag item represent an unnamed type -function! s:IsUnnamedType(tagItem) - let bResult = 0 - if has_key(a:tagItem, 'typeref') - " Note: Thanks for __anon ! - let bResult = match(a:tagItem.typeref, '\C\<__anon') >= 0 - endif - return bResult -endfunc - -" Search the declaration of a variable and return the type info -function! s:SearchTypeInfoOfDecl(szVariable) - let szReVariable = '\C\<'.a:szVariable.'\>' - - let originalPos = getpos('.') - let origPos = originalPos[1:2] - let curPos = origPos - let stopPos = origPos - - while curPos !=[0,0] - " We go to the start of the current scope - let curPos = searchpairpos('{', '', '}', 'bW', g:omni#cpp#utils#expIgnoreComments) - if curPos != [0,0] - let matchPos = curPos - " Now want to search our variable but we don't want to go in child - " scope - while matchPos != [0,0] - let matchPos = searchpos('{\|'.szReVariable, 'W', stopPos[0]) - if matchPos != [0,0] - " We ignore matches under comment - if omni#cpp#utils#IsCursorInCommentOrString() - continue - endif - - " Getting the current line - let szLine = getline('.') - if match(szLine, szReVariable)>=0 - " We found our variable - " Check if the current instruction is a decl instruction - let tokens = omni#cpp#utils#TokenizeCurrentInstruction() - let szTypeInfo = s:ExtractTypeInfoFromDecl(tokens) - if szTypeInfo != '' - call setpos('.', originalPos) - return omni#cpp#utils#CreateTypeInfo(szTypeInfo) - endif - else - " We found a child scope, we don't want to go in, thus - " we search for the end } of this child scope - let bracketEnd = searchpairpos('{', '', '}', 'nW', g:omni#cpp#utils#expIgnoreComments) - if bracketEnd == [0,0] - break - endif - - if bracketEnd[0] >= stopPos[0] - " The end of the scope is after our cursor we stop - " the search - break - else - " We move the cursor and continue to search our - " variable - call setpos('.', [0, bracketEnd[0], bracketEnd[1], 0]) - endif - endif - endif - endwhile - - " Backing to the start of the scope - call setpos('.', [0,curPos[0], curPos[1], 0]) - let stopPos = curPos - endif - endwhile - - let result = {} - if s:LocalSearchDecl(a:szVariable)==0 && !omni#cpp#utils#IsCursorInCommentOrString() - let tokens = omni#cpp#utils#TokenizeCurrentInstruction() - let szTypeInfo = s:ExtractTypeInfoFromDecl(tokens) - if szTypeInfo != '' - let result = omni#cpp#utils#CreateTypeInfo(szTypeInfo) - endif - endif - - call setpos('.', originalPos) - - return result -endfunc - -" Search a declaration -" @return -" - tokens of the current instruction if success -" - empty list if failure -function! s:SearchDecl(szVariable) - let result = {} - let originalPos = getpos('.') - let searchResult = s:LocalSearchDecl(a:szVariable) - if searchResult==0 - " searchdecl() may detect a decl if the variable is in a conditional - " instruction (if, elseif, while etc...) - " We have to check if the detected decl is really a decl instruction - let tokens = omni#cpp#utils#TokenizeCurrentInstruction() - - for token in tokens - " Simple test - if index(['if', 'elseif', 'while', 'for', 'switch'], token.value)>=0 - " Invalid declaration instruction - call setpos('.', originalPos) - return result - endif - endfor - - let szTypeInfo = s:ExtractTypeInfoFromDecl(tokens) - if szTypeInfo != '' - let result = omni#cpp#utils#CreateTypeInfo(szTypeInfo) - endif - endif - call setpos('.', originalPos) - return result -endfunc - -" Extract the type info string from an instruction. -" We use a small parser to extract the type -" We parse the code according to a C++ BNF from: http://www.nongnu.org/hcb/#basic.link -" @param tokens: token list of the current instruction -function! s:ExtractTypeInfoFromDecl(tokens) - return omni#cpp#utils#ExtractTypeInfoFromTokens(a:tokens) -endfunc - -" Convert tokens to string -function! s:TokensToString(tokens) - let result = '' - for token in a:tokens - let result = result . token.value . ' ' - endfor - return result[:-2] -endfunc - -" Resolve a cast. -" Resolve a C++ cast -" @param list of token. tokens must be a list that represents -" a cast expression (C++ cast) the function does not control -" if it's a cast or not -" eg: static_cast(something) -" @return type info string -function! s:ResolveCppCast(tokens) - return omni#cpp#utils#ExtractTypeInfoFromTokens(s:ResolveCast(a:tokens, '<', '>')) -endfunc - -" Resolve a cast. -" Resolve a C cast -" @param list of token. tokens must be a list that represents -" a cast expression (C cast) the function does not control -" if it's a cast or not -" eg: (MyClass*)something -" @return type info string -function! s:ResolveCCast(tokens) - return omni#cpp#utils#ExtractTypeInfoFromTokens(s:ResolveCast(a:tokens, '(', ')')) -endfunc - -" Resolve a cast. -" Resolve a C cast -" @param list of token. tokens must be a list that represents -" a cast expression (C cast) the function does not control -" if it's a cast or not -" eg: (MyClass*)something -" @return type tokens -function! s:ResolveCast(tokens, startChar, endChar) - let tokens = omni#cpp#utils#BuildParenthesisGroups(a:tokens) - - " We remove useless parenthesis eg: (((MyClass))) - let tokens = omni#cpp#utils#SimplifyParenthesis(tokens) - - let countItem=0 - let startIndex = -1 - let endIndex = -1 - let i = 0 - for token in tokens - if startIndex==-1 - if token.value==a:startChar - let countItem += 1 - let startIndex = i - endif - else - if token.value==a:startChar - let countItem += 1 - elseif token.value==a:endChar - let countItem -= 1 - endif - - if countItem==0 - let endIndex = i - break - endif - endif - let i+=1 - endfor - - return tokens[startIndex+1 : endIndex-1] -endfunc - -" Replacement for build-in function 'searchdecl' -" It does not require that the upper-level bracket is in the first column. -" Otherwise it should be equal to 'searchdecl(name, 0, 1)' -" @param name: name of variable to find declaration for -function! s:LocalSearchDecl(name) - - if g:OmniCpp_LocalSearchDecl == 0 - let bUserIgnoreCase = &ignorecase - - " Forcing the noignorecase option - " avoid bug when, for example, if we have a declaration like this : "A a;" - set noignorecase - - let result = searchdecl(a:name, 0, 1) - - " Restoring user's setting - let &ignorecase = bUserIgnoreCase - - return result - endif - - let lastpos = getpos('.') - let winview = winsaveview() - let lastfoldenable = &foldenable - let &foldenable = 0 - - " We add \C (noignorecase) to - " avoid bug when, for example, if we have a declaration like this : "A a;" - let varname = "\\C\\<" . a:name . "\\>" - - " Go to first blank line before begin of highest scope - normal 99[{ - let scopepos = getpos('.') - while (line('.') > 1) && (len(split(getline('.'))) > 0) - call cursor(line('.')-1, 0) - endwhile - - let declpos = [ 0, 0, 0, 0 ] - while search(varname, '', scopepos[1]) > 0 - " Check if we are a string or a comment - if omni#cpp#utils#IsCursorInCommentOrString() - continue - endif - - " Remember match - let declpos = getpos('.') - endwhile - if declpos[1] != 0 - " We found a match - call winrestview(winview) - call setpos('.', declpos) - let &foldenable = lastfoldenable - return 0 - endif - - while search(varname, '', lastpos[1]) > 0 - " Check if current scope is ending before variable - let old_cur = getpos('.') - normal ]} - let new_cur = getpos('.') - call setpos('.', old_cur) - if (new_cur[1] < lastpos[1]) || ((new_cur[1] == lastpos[1]) && (new_cur[2] < lastpos[2])) - continue - endif - - " Check if we are a string or a comment - if omni#cpp#utils#IsCursorInCommentOrString() - continue - endif - - " We found match - call winrestview(winview) - call setpos('.', old_cur) - let &foldenable = lastfoldenable - return 0 - endwhile - - " No match found. - call winrestview(winview) - let &foldenable = lastfoldenable - return 1 -endfunc diff --git a/.vim/autoload/omni/cpp/maycomplete.vim b/.vim/autoload/omni/cpp/maycomplete.vim deleted file mode 100644 index 610526b..0000000 --- a/.vim/autoload/omni/cpp/maycomplete.vim +++ /dev/null @@ -1,82 +0,0 @@ -" 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 = "\\" - - " 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 .= "\" - 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 .= "\" - let szOmniMapping .= "\=pumvisible() ? \"\\\" : \"\"\" - 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 diff --git a/.vim/autoload/omni/cpp/namespaces.vim b/.vim/autoload/omni/cpp/namespaces.vim deleted file mode 100644 index 386b3f9..0000000 --- a/.vim/autoload/omni/cpp/namespaces.vim +++ /dev/null @@ -1,838 +0,0 @@ -" Description: Omni completion script for cpp files -" Maintainer: Vissale NEANG -" Last Change: 26 sept. 2007 - -let g:omni#cpp#namespaces#CacheResolve = {} -let g:omni#cpp#namespaces#CacheUsing = {} -" TODO: For the next release -"let g:omni#cpp#namespaces#CacheAlias = {} - -" Get the using namespace list from a line -function! s:GetNamespaceAliasListFromLine(szLine) - let result = {} - let tokens = omni#cpp#tokenizer#Tokenize(a:szLine) - let szAlias = '' - let szNamespace = '' - let state = 0 - for token in tokens - if state==0 - let szAlias = '' - let szNamespace = '' - if token.value == '/*' - let state = 1 - elseif token.value == '//' - " It's a comment - let state = -1 - break - elseif token.value == 'namespace' - let state = 2 - endif - elseif state==1 - if token.value == '*/' - let state=0 - endif - elseif state==2 - if token.kind == 'cppWord' - let szAlias .= token.value - let state = 3 - else - let state = -1 - break - endif - elseif state == 3 - if token.value == '=' - let state = 4 - else - let state = -1 - break - endif - elseif state == 4 - if token.value == '::' - let szNamespace .= token.value - let state = 5 - elseif token.kind == 'cppWord' - let szNamespace .= token.value - let state = 6 - " Maybe end of tokens - endif - elseif state==5 - if token.kind == 'cppWord' - let szNamespace .= token.value - let state = 6 - " Maybe end of tokens - else - " Error, we can't have 'namespace ALIAS = Something::' - let state = -1 - break - endif - elseif state==6 - if token.value == '::' - let szNamespace .= token.value - let state = 5 - else - call extend(result, {szAlias : szNamespace}) - let state = 0 - endif - endif - endfor - - if state == 6 - call extend(result, {szAlias : szNamespace}) - endif - - return result -endfunc - -" Get the using namespace list from a line -function! s:GetNamespaceListFromLine(szLine) - let result = [] - let tokens = omni#cpp#tokenizer#Tokenize(a:szLine) - let szNamespace = '' - let state = 0 - for token in tokens - if state==0 - let szNamespace = '' - if token.value == '/*' - let state = 1 - elseif token.value == '//' - " It's a comment - let state = -1 - break - elseif token.value == 'using' - let state = 2 - endif - elseif state==1 - if token.value == '*/' - let state=0 - endif - elseif state==2 - if token.value == 'namespace' - let state = 3 - else - " Error, 'using' must be followed by 'namespace' - let state = -1 - break - endif - elseif state==3 - if token.value == '::' - let szNamespace .= token.value - let state = 4 - elseif token.kind == 'cppWord' - let szNamespace .= token.value - let state = 5 - " Maybe end of tokens - endif - elseif state==4 - if token.kind == 'cppWord' - let szNamespace .= token.value - let state = 5 - " Maybe end of tokens - else - " Error, we can't have 'using namespace Something::' - let state = -1 - break - endif - elseif state==5 - if token.value == '::' - let szNamespace .= token.value - let state = 4 - else - call extend(result, [szNamespace]) - let state = 0 - endif - endif - endfor - - if state == 5 - call extend(result, [szNamespace]) - endif - - return result -endfunc - -" Get the namespace list from a namespace map -function! s:GetUsingNamespaceListFromMap(namespaceMap, ...) - let stopLine = 0 - if a:0>0 - let stopLine = a:1 - endif - - let result = [] - let keys = sort(keys(a:namespaceMap), 'omni#common#utils#CompareNumber') - for i in keys - if stopLine != 0 && i > stopLine - break - endif - call extend(result, a:namespaceMap[i]) - endfor - return result -endfunc - -" Get global using namespace list from the current buffer -function! omni#cpp#namespaces#GetListFromCurrentBuffer(...) - let namespaceMap = s:GetAllUsingNamespaceMapFromCurrentBuffer() - let result = [] - if namespaceMap != {} - let result = s:GetUsingNamespaceListFromMap(namespaceMap, (a:0 > 0)? a:1 : line('.')) - endif - return result -endfunc - -" Get global using namespace map from the current buffer and include files recursively -function! s:GetAllUsingNamespaceMapFromCurrentBuffer(...) - let includeGuard = (a:0>0)? a:1 : {} - - let szBufferName = getreg("%") - let szFilePath = omni#cpp#utils#ResolveFilePath(szBufferName) - let szFilePath = (szFilePath=='')? szBufferName : szFilePath - - let namespaceMap = {} - if has_key(includeGuard, szFilePath) - return namespaceMap - else - let includeGuard[szFilePath] = 1 - endif - - let namespaceMap = omni#cpp#namespaces#GetMapFromCurrentBuffer() - - if g:OmniCpp_NamespaceSearch != 2 - " We don't search included files if OmniCpp_NamespaceSearch != 2 - return namespaceMap - endif - - for inc in omni#cpp#includes#GetList() - let lnum = inc.pos[0] - let tmpMap = s:GetAllUsingNamespaceMapFromFile(inc.include, includeGuard) - if tmpMap != {} - if has_key(namespaceMap, lnum) - call extend(namespaceMap[lnum], s:GetUsingNamespaceListFromMap(tmpMap)) - else - let namespaceMap[lnum] = s:GetUsingNamespaceListFromMap(tmpMap) - endif - endif - endfor - - return namespaceMap -endfunc - -" Get global using namespace map from a file and include files recursively -function! s:GetAllUsingNamespaceMapFromFile(szFilePath, ...) - let includeGuard = {} - if a:0 >0 - let includeGuard = a:1 - endif - - let szFilePath = omni#cpp#utils#ResolveFilePath(a:szFilePath) - let szFilePath = (szFilePath=='')? a:szFilePath : szFilePath - - let namespaceMap = {} - if has_key(includeGuard, szFilePath) - return namespaceMap - else - let includeGuard[szFilePath] = 1 - endif - - " If g:OmniCpp_NamespaceSearch == 1 (search namespaces only in the current - " buffer) we don't use cache for the current buffer - let namespaceMap = omni#cpp#namespaces#GetMapFromBuffer(szFilePath, g:OmniCpp_NamespaceSearch==1) - - if g:OmniCpp_NamespaceSearch != 2 - " We don't search included files if OmniCpp_NamespaceSearch != 2 - return namespaceMap - endif - - for inc in omni#cpp#includes#GetList(szFilePath) - let lnum = inc.pos[0] - let tmpMap = s:GetAllUsingNamespaceMapFromFile(inc.include, includeGuard) - if tmpMap != {} - if has_key(namespaceMap, lnum) - call extend(namespaceMap[lnum], s:GetUsingNamespaceListFromMap(tmpMap)) - else - let namespaceMap[lnum] = s:GetUsingNamespaceListFromMap(tmpMap) - endif - endif - endfor - - return namespaceMap -endfunc - -" Get global using namespace map from a the current buffer -function! omni#cpp#namespaces#GetMapFromCurrentBuffer() - let namespaceMap = {} - let originalPos = getpos('.') - - call setpos('.', [0, 1, 1, 0]) - let curPos = [1,1] - while curPos != [0,0] - let curPos = searchpos('\C^using\s\+namespace', 'W') - if curPos != [0,0] - let szLine = getline('.') - let startPos = curPos[1] - let endPos = match(szLine, ';', startPos-1) - if endPos!=-1 - " We get the namespace list from the line - let namespaceMap[curPos[0]] = s:GetNamespaceListFromLine(szLine) - endif - endif - endwhile - - call setpos('.', originalPos) - return namespaceMap -endfunc - -" Get global using namespace map from a file -function! omni#cpp#namespaces#GetMapFromBuffer(szFilePath, ...) - let bUpdate = 0 - if a:0 > 0 - let bUpdate = a:1 - endif - - let szFilePath = omni#cpp#utils#ResolveFilePath(a:szFilePath) - let szFilePath = (szFilePath=='')? a:szFilePath : szFilePath - - if !bUpdate && has_key(g:omni#cpp#namespaces#CacheUsing, szFilePath) - return copy(g:omni#cpp#namespaces#CacheUsing[szFilePath]) - endif - - let namespaceMap = {} - " The file exists, we get the global namespaces in this file - let szFixedPath = escape(szFilePath, g:omni#cpp#utils#szEscapedCharacters) - execute 'silent! lvimgrep /\C^using\s\+namespace/gj '.szFixedPath - - " key = line number - " value = list of namespaces - let listQuickFix = getloclist(0) - for qf in listQuickFix - let szLine = qf.text - let startPos = qf.col - let endPos = match(szLine, ';', startPos-1) - if endPos!=-1 - " We get the namespace list from the line - let namespaceMap[qf.lnum] = s:GetNamespaceListFromLine(szLine) - endif - endfor - - if szFixedPath != '' - let g:omni#cpp#namespaces#CacheUsing[szFixedPath] = namespaceMap - endif - - return copy(namespaceMap) -endfunc - -" Get the stop position when searching for local variables -function! s:GetStopPositionForLocalSearch() - " Stop position when searching a local variable - let originalPos = getpos('.') - let origPos = originalPos[1:2] - let stopPosition = origPos - let curPos = origPos - while curPos !=[0,0] - let stopPosition = curPos - let curPos = searchpairpos('{', '', '}', 'bW', g:omni#cpp#utils#expIgnoreComments) - endwhile - call setpos('.', originalPos) - - return stopPosition -endfunc - -" Get namespaces alias used at the cursor postion in a vim buffer -" Note: The result depends on the current cursor position -" @return -" - Map of namespace alias -function! s:GetNamespaceAliasMap() - " We store the cursor position because searchpairpos() moves the cursor - let result = {} - let originalPos = getpos('.') - let origPos = originalPos[1:2] - - let stopPos = s:GetStopPositionForLocalSearch() - let stopLine = stopPos[0] - let curPos = origPos - let lastLine = 0 - let nextStopLine = origPos[0] - let szReAlias = '\Cnamespace\s\+\w\+\s\+=' - while curPos !=[0,0] - let curPos = searchpos('}\|\('. szReAlias .'\)', 'bW',stopLine) - if curPos!=[0,0] && curPos[0]!=lastLine - let lastLine = curPos[0] - - let szLine = getline('.') - if origPos[0] == curPos[0] - " We get the line until cursor position - let szLine = szLine[:origPos[1]] - endif - - let szLine = omni#cpp#utils#GetCodeFromLine(szLine) - if match(szLine, szReAlias)<0 - " We found a '}' - let curPos = searchpairpos('{', '', '}', 'bW', g:omni#cpp#utils#expIgnoreComments) - else - " We get the namespace alias from the line - call extend(result, s:GetNamespaceAliasListFromLine(szLine)) - let nextStopLine = curPos[0] - endif - endif - endwhile - - " Setting the cursor to the original position - call setpos('.', originalPos) - - call s:ResolveAliasKeys(result) - return result -endfunc - -" Resolve an alias -" eg: namespace IAmAnAlias1 = Ns1 -" eg: namespace IAmAnAlias2 = IAmAnAlias1::Ns2 -" => IAmAnAlias2 = Ns1::Ns2 -function! s:ResolveAliasKey(mapNamespaceAlias, szAlias) - let szResult = a:mapNamespaceAlias[a:szAlias] - " ::Ns1::Ns2::Ns3 => ['Ns1', 'Ns2', 'Ns3'] - let listNamespace = split(szResult, '::') - if len(listNamespace) - " szBeginPart = 'Ns1' - let szBeginPart = remove(listNamespace, 0) - - " Is 'Ns1' an alias ? - if has_key(a:mapNamespaceAlias, szBeginPart) && szBeginPart != a:szAlias - " Resolving alias 'Ns1' - " eg: Ns1 = NsResolved - let szResult = s:ResolveAliasKey(a:mapNamespaceAlias, szBeginPart) - " szEndPart = 'Ns2::Ns3' - let szEndPart = join(listNamespace, '::') - if szEndPart != '' - " Concatenation => szResult = 'NsResolved::Ns2::Ns3' - let szResult .= '::' . szEndPart - endif - endif - endif - return szResult -endfunc - -" Resolve all keys in the namespace alias map -function! s:ResolveAliasKeys(mapNamespaceAlias) - let mapNamespaceAlias = a:mapNamespaceAlias - call map(mapNamespaceAlias, 's:ResolveAliasKey(mapNamespaceAlias, v:key)') -endfunc - -" Resolve namespace alias -function! omni#cpp#namespaces#ResolveAlias(mapNamespaceAlias, szNamespace) - let szResult = a:szNamespace - " ::Ns1::Ns2::Ns3 => ['Ns1', 'Ns2', 'Ns3'] - let listNamespace = split(a:szNamespace, '::') - if len(listNamespace) - " szBeginPart = 'Ns1' - let szBeginPart = remove(listNamespace, 0) - - " Is 'Ns1' an alias ? - if has_key(a:mapNamespaceAlias, szBeginPart) - " Resolving alias 'Ns1' - " eg: Ns1 = NsResolved - let szResult = a:mapNamespaceAlias[szBeginPart] - " szEndPart = 'Ns2::Ns3' - let szEndPart = join(listNamespace, '::') - if szEndPart != '' - " Concatenation => szResult = 'NsResolved::Ns2::Ns3' - let szResult .= '::' . szEndPart - endif - - " If a:szNamespace starts with '::' we add '::' to the beginning - " of the result - if match(a:szNamespace, '^::')>=0 - let szResult = omni#cpp#utils#SimplifyScope('::' . szResult) - endif - endif - endif - return szResult -endfunc - -" Resolve namespace alias -function! s:ResolveAliasInNamespaceList(mapNamespaceAlias, listNamespaces) - call map(a:listNamespaces, 'omni#cpp#namespaces#ResolveAlias(a:mapNamespaceAlias, v:val)') -endfunc - -" Get namespaces used at the cursor postion in a vim buffer -" Note: The result depends on the current cursor position -" @return -" - List of namespace used in the reverse order -function! omni#cpp#namespaces#GetUsingNamespaces() - " We have to get local using namespace declarations - " We need the current cursor position and the position of the start of the - " current scope - - " We store the cursor position because searchpairpos() moves the cursor - let result = [] - let originalPos = getpos('.') - let origPos = originalPos[1:2] - - let stopPos = s:GetStopPositionForLocalSearch() - - let stopLine = stopPos[0] - let curPos = origPos - let lastLine = 0 - let nextStopLine = origPos[0] - while curPos !=[0,0] - let curPos = searchpos('\C}\|\(using\s\+namespace\)', 'bW',stopLine) - if curPos!=[0,0] && curPos[0]!=lastLine - let lastLine = curPos[0] - - let szLine = getline('.') - if origPos[0] == curPos[0] - " We get the line until cursor position - let szLine = szLine[:origPos[1]] - endif - - let szLine = omni#cpp#utils#GetCodeFromLine(szLine) - if match(szLine, '\Cusing\s\+namespace')<0 - " We found a '}' - let curPos = searchpairpos('{', '', '}', 'bW', g:omni#cpp#utils#expIgnoreComments) - else - " We get the namespace list from the line - let result = s:GetNamespaceListFromLine(szLine) + result - let nextStopLine = curPos[0] - endif - endif - endwhile - - " Setting the cursor to the original position - call setpos('.', originalPos) - - " 2) Now we can get all global using namespace declaration from the - " beginning of the file to nextStopLine - let result = omni#cpp#namespaces#GetListFromCurrentBuffer(nextStopLine) + result - - " Resolving alias in the namespace list - " TODO: For the next release - "let g:omni#cpp#namespaces#CacheAlias= s:GetNamespaceAliasMap() - "call s:ResolveAliasInNamespaceList(g:omni#cpp#namespaces#CacheAlias, result) - - return ['::'] + result -endfunc - -" Resolve a using namespace regarding the current context -" For each namespace used: -" - We get all possible contexts where the namespace -" can be define -" - We do a comparison test of each parent contexts with the current -" context list -" - If one and only one parent context is present in the -" current context list we add the namespace in the current -" context -" - If there is more than one of parent contexts in the -" current context the namespace is ambiguous -" @return -" - result item -" - kind = 0|1 -" - 0 = unresolved or error -" - 1 = resolved -" - value = resolved namespace -function! s:ResolveNamespace(namespace, mapCurrentContexts) - let result = {'kind':0, 'value': ''} - - " If the namespace is already resolved we add it in the list of - " current contexts - if match(a:namespace, '^::')>=0 - let result.kind = 1 - let result.value = a:namespace - return result - elseif match(a:namespace, '\w\+::\w\+')>=0 - let mapCurrentContextsTmp = copy(a:mapCurrentContexts) - let resolvedItem = {} - for nsTmp in split(a:namespace, '::') - let resolvedItem = s:ResolveNamespace(nsTmp, mapCurrentContextsTmp) - if resolvedItem.kind - " Note: We don't extend the map - let mapCurrentContextsTmp = {resolvedItem.value : 1} - else - break - endif - endfor - if resolvedItem!={} && resolvedItem.kind - let result.kind = 1 - let result.value = resolvedItem.value - endif - return result - endif - - " We get all possible parent contexts of this namespace - let listTagsOfNamespace = [] - if has_key(g:omni#cpp#namespaces#CacheResolve, a:namespace) - let listTagsOfNamespace = g:omni#cpp#namespaces#CacheResolve[a:namespace] - else - let listTagsOfNamespace = omni#common#utils#TagList('^'.a:namespace.'$') - let g:omni#cpp#namespaces#CacheResolve[a:namespace] = listTagsOfNamespace - endif - - if len(listTagsOfNamespace)==0 - return result - endif - call filter(listTagsOfNamespace, 'v:val.kind[0]=="n"') - - " We extract parent context from tags - " We use a map to avoid multiple entries - let mapContext = {} - for tagItem in listTagsOfNamespace - let szParentContext = omni#cpp#utils#ExtractScope(tagItem) - let mapContext[szParentContext] = 1 - endfor - let listParentContext = keys(mapContext) - - " Now for each parent context we test if the context is in the current - " contexts list - let listResolvedNamespace = [] - for szParentContext in listParentContext - if has_key(a:mapCurrentContexts, szParentContext) - call extend(listResolvedNamespace, [omni#cpp#utils#SimplifyScope(szParentContext.'::'.a:namespace)]) - endif - endfor - - " Now we know if the namespace is ambiguous or not - let len = len(listResolvedNamespace) - if len==1 - " Namespace resolved - let result.kind = 1 - let result.value = listResolvedNamespace[0] - elseif len > 1 - " Ambiguous namespace, possible matches are in listResolvedNamespace - else - " Other cases - endif - return result -endfunc - -" Resolve namespaces -"@return -" - List of resolved namespaces -function! omni#cpp#namespaces#ResolveAll(namespacesUsed) - - " We add the default context '::' - let contextOrder = 0 - let mapCurrentContexts = {} - - " For each namespace used: - " - We get all possible contexts where the namespace - " can be define - " - We do a comparison test of each parent contexts with the current - " context list - " - If one and only one parent context is present in the - " current context list we add the namespace in the current - " context - " - If there is more than one of parent contexts in the - " current context the namespace is ambiguous - for ns in a:namespacesUsed - let resolvedItem = s:ResolveNamespace(ns, mapCurrentContexts) - if resolvedItem.kind - let contextOrder+=1 - let mapCurrentContexts[resolvedItem.value] = contextOrder - endif - endfor - - " Build the list of current contexts from the map, we have to keep the - " order - let mapReorder = {} - for key in keys(mapCurrentContexts) - let mapReorder[ mapCurrentContexts[key] ] = key - endfor - let result = [] - for key in sort(keys(mapReorder)) - call extend(result, [mapReorder[key]]) - endfor - return result -endfunc - -" Build the context stack -function! s:BuildContextStack(namespaces, szCurrentScope) - let result = copy(a:namespaces) - if a:szCurrentScope != '::' - let tagItem = omni#cpp#utils#GetResolvedTagItem(a:namespaces, omni#cpp#utils#CreateTypeInfo(a:szCurrentScope)) - if has_key(tagItem, 'inherits') - let listBaseClass = omni#cpp#utils#GetClassInheritanceList(a:namespaces, omni#cpp#utils#CreateTypeInfo(a:szCurrentScope)) - let result = listBaseClass + result - elseif has_key(tagItem, 'kind') && index(['c', 's', 'u', 'n'], tagItem.kind[0])>=0 - call insert(result, omni#cpp#utils#ExtractTypeInfoFromTag(tagItem)) - endif - endif - return result -endfunc - -" Returns the class scope at the current position of the cursor -" @return a string that represents the class scope -" eg: ::NameSpace1::Class1 -" The returned string always starts with '::' -" Note: In term of performance it's the weak point of the script -function! s:GetClassScopeAtCursor() - " We store the cursor position because searchpairpos() moves the cursor - let originalPos = getpos('.') - let endPos = originalPos[1:2] - let listCode = [] - let result = {'namespaces': [], 'scope': ''} - - while endPos!=[0,0] - let endPos = searchpairpos('{', '', '}', 'bW', g:omni#cpp#utils#expIgnoreComments) - let szReStartPos = '[;{}]\|\%^' - let startPos = searchpairpos(szReStartPos, '', '{', 'bWn', g:omni#cpp#utils#expIgnoreComments) - - " If the file starts with a comment so the startPos can be [0,0] - " we change it to [1,1] - if startPos==[0,0] - let startPos = [1,1] - endif - - " Get lines backward from cursor position to last ; or { or } - " or when we are at the beginning of the file. - " We store lines in listCode - if endPos!=[0,0] - " We remove the last character which is a '{' - " We also remove starting { or } or ; if exits - let szCodeWithoutComments = substitute(omni#cpp#utils#GetCode(startPos, endPos)[:-2], '^[;{}]', '', 'g') - call insert(listCode, {'startLine' : startPos[0], 'code' : szCodeWithoutComments}) - endif - endwhile - " Setting the cursor to the original position - call setpos('.', originalPos) - - let listClassScope = [] - let bResolved = 0 - let startLine = 0 - " Now we can check in the list of code if there is a function - for code in listCode - " We get the name of the namespace, class, struct or union - " and we store it in listClassScope - let tokens = omni#cpp#tokenizer#Tokenize(code.code) - let bContinue=0 - let bAddNamespace = 0 - let state=0 - for token in tokens - if state==0 - if index(['namespace', 'class', 'struct', 'union'], token.value)>=0 - if token.value == 'namespace' - let bAddNamespace = 1 - endif - let state= 1 - " Maybe end of tokens - endif - elseif state==1 - if token.kind == 'cppWord' - " eg: namespace MyNs { class MyCl {}; } - " => listClassScope = [MyNs, MyCl] - call extend( listClassScope , [token.value] ) - - " Add the namespace in result - if bAddNamespace - call extend(result.namespaces, [token.value]) - let bAddNamespace = 0 - endif - - let bContinue=1 - break - endif - endif - endfor - if bContinue==1 - continue - endif - - " Simple test to check if we have a chance to find a - " class method - let aPos = matchend(code.code, '::\s*\~*\s*\w\+\s*(') - if aPos ==-1 - continue - endif - - let startLine = code.startLine - let listTmp = [] - " eg: 'void MyNamespace::MyClass::foo(' - " => tokens = ['MyClass', '::', 'MyNamespace', 'void'] - let tokens = reverse(omni#cpp#tokenizer#Tokenize(code.code[:aPos-1])[:-4]) - let state = 0 - " Reading tokens backward - for token in tokens - if state==0 - if token.kind=='cppWord' - call insert(listTmp, token.value) - let state=1 - endif - elseif state==1 - if token.value=='::' - let state=2 - else - break - endif - elseif state==2 - if token.kind=='cppWord' - call insert(listTmp, token.value) - let state=1 - else - break - endif - endif - endfor - - if len(listTmp) - if len(listClassScope) - let bResolved = 1 - " Merging class scopes - " eg: current class scope = 'MyNs::MyCl1' - " method class scope = 'MyCl1::MyCl2' - " If we add the method class scope to current class scope - " we'll have MyNs::MyCl1::MyCl1::MyCl2 => it's wrong - " we want MyNs::MyCl1::MyCl2 - let index = 0 - for methodClassScope in listTmp - if methodClassScope==listClassScope[-1] - let listTmp = listTmp[index+1:] - break - else - let index+=1 - endif - endfor - endif - call extend(listClassScope, listTmp) - break - endif - endfor - - let szClassScope = '::' - if len(listClassScope) - if bResolved - let szClassScope .= join(listClassScope, '::') - else - let szClassScope = join(listClassScope, '::') - - " The class scope is not resolved, we have to check using - " namespace declarations and search the class scope in each - " namespace - if startLine != 0 - let namespaces = ['::'] + omni#cpp#namespaces#GetListFromCurrentBuffer(startLine) - let namespaces = omni#cpp#namespaces#ResolveAll(namespaces) - let tagItem = omni#cpp#utils#GetResolvedTagItem(namespaces, omni#cpp#utils#CreateTypeInfo(szClassScope)) - if tagItem != {} - let szClassScope = omni#cpp#utils#ExtractTypeInfoFromTag(tagItem) - endif - endif - endif - endif - - let result.scope = szClassScope - return result -endfunc - -" Get all contexts at the cursor position -function! omni#cpp#namespaces#GetContexts() - " Get the current class scope at the cursor, the result depends on the current cursor position - let scopeItem = s:GetClassScopeAtCursor() - let listUsingNamespace = copy(g:OmniCpp_DefaultNamespaces) - call extend(listUsingNamespace, scopeItem.namespaces) - if g:OmniCpp_NamespaceSearch && &filetype != 'c' - " Get namespaces used in the file until the cursor position - let listUsingNamespace = omni#cpp#namespaces#GetUsingNamespaces() + listUsingNamespace - " Resolving namespaces, removing ambiguous namespaces - let namespaces = omni#cpp#namespaces#ResolveAll(listUsingNamespace) - else - let namespaces = ['::'] + listUsingNamespace - endif - call reverse(namespaces) - - " Building context stack from namespaces and the current class scope - return s:BuildContextStack(namespaces, scopeItem.scope) -endfunc diff --git a/.vim/autoload/omni/cpp/settings.vim b/.vim/autoload/omni/cpp/settings.vim deleted file mode 100644 index 6683d3a..0000000 --- a/.vim/autoload/omni/cpp/settings.vim +++ /dev/null @@ -1,96 +0,0 @@ -" Description: Omni completion script for cpp files -" Maintainer: Vissale NEANG -" Last Change: 26 sept. 2007 - -function! omni#cpp#settings#Init() - " Global scope search on/off - " 0 = disabled - " 1 = enabled - if !exists('g:OmniCpp_GlobalScopeSearch') - let g:OmniCpp_GlobalScopeSearch = 1 - endif - - " Sets the namespace search method - " 0 = disabled - " 1 = search namespaces in the current file - " 2 = search namespaces in the current file and included files - if !exists('g:OmniCpp_NamespaceSearch') - let g:OmniCpp_NamespaceSearch = 1 - endif - - " Set the class scope completion mode - " 0 = auto - " 1 = show all members (static, public, protected and private) - if !exists('g:OmniCpp_DisplayMode') - let g:OmniCpp_DisplayMode = 0 - endif - - " Set if the scope is displayed in the abbr column of the popup - " 0 = no - " 1 = yes - if !exists('g:OmniCpp_ShowScopeInAbbr') - let g:OmniCpp_ShowScopeInAbbr = 0 - endif - - " Set if the function prototype is displayed in the abbr column of the popup - " 0 = no - " 1 = yes - if !exists('g:OmniCpp_ShowPrototypeInAbbr') - let g:OmniCpp_ShowPrototypeInAbbr = 0 - endif - - " Set if the access (+,#,-) is displayed - " 0 = no - " 1 = yes - if !exists('g:OmniCpp_ShowAccess') - let g:OmniCpp_ShowAccess = 1 - endif - - " Set the list of default namespaces - " eg: ['std'] - if !exists('g:OmniCpp_DefaultNamespaces') - let g:OmniCpp_DefaultNamespaces = [] - endif - - " Set MayComplete to '.' - " 0 = disabled - " 1 = enabled - " default = 1 - if !exists('g:OmniCpp_MayCompleteDot') - let g:OmniCpp_MayCompleteDot = 1 - endif - - " Set MayComplete to '->' - " 0 = disabled - " 1 = enabled - " default = 1 - if !exists('g:OmniCpp_MayCompleteArrow') - let g:OmniCpp_MayCompleteArrow = 1 - endif - - " Set MayComplete to dot - " 0 = disabled - " 1 = enabled - " default = 0 - if !exists('g:OmniCpp_MayCompleteScope') - let g:OmniCpp_MayCompleteScope = 0 - endif - - " When completeopt does not contain longest option, this setting - " controls the behaviour of the popup menu selection when starting the completion - " 0 = don't select first item - " 1 = select first item (inserting it to the text) - " 2 = select first item (without inserting it to the text) - " default = 0 - if !exists('g:OmniCpp_SelectFirstItem') - let g:OmniCpp_SelectFirstItem= 0 - endif - - " Use local search function for variable definitions - " 0 = use standard vim search function - " 1 = use local search function - " default = 0 - if !exists('g:OmniCpp_LocalSearchDecl') - let g:OmniCpp_LocalSearchDecl= 0 - endif -endfunc diff --git a/.vim/autoload/omni/cpp/tokenizer.vim b/.vim/autoload/omni/cpp/tokenizer.vim deleted file mode 100644 index 16e0be2..0000000 --- a/.vim/autoload/omni/cpp/tokenizer.vim +++ /dev/null @@ -1,93 +0,0 @@ -" Description: Omni completion tokenizer -" Maintainer: Vissale NEANG -" Last Change: 26 sept. 2007 -" TODO: Generic behaviour for Tokenize() - -" From the C++ BNF -let s:cppKeyword = ['asm', 'auto', 'bool', 'break', 'case', 'catch', 'char', 'class', 'const', 'const_cast', 'continue', 'default', 'delete', 'do', 'double', 'dynamic_cast', 'else', 'enum', 'explicit', 'export', 'extern', 'false', 'float', 'for', 'friend', 'goto', 'if', 'inline', 'int', 'long', 'mutable', 'namespace', 'new', 'operator', 'private', 'protected', 'public', 'register', 'reinterpret_cast', 'return', 'short', 'signed', 'sizeof', 'static', 'static_cast', 'struct', 'switch', 'template', 'this', 'throw', 'true', 'try', 'typedef', 'typeid', 'typename', 'union', 'unsigned', 'using', 'virtual', 'void', 'volatile', 'wchar_t', 'while', 'and', 'and_eq', 'bitand', 'bitor', 'compl', 'not', 'not_eq', 'or', 'or_eq', 'xor', 'xor_eq'] - -let s:reCppKeyword = '\C\<'.join(s:cppKeyword, '\>\|\<').'\>' - -" The order of items in this list is very important because we use this list to build a regular -" expression (see below) for tokenization -let s:cppOperatorPunctuator = ['->*', '->', '--', '-=', '-', '!=', '!', '##', '#', '%:%:', '%=', '%>', '%:', '%', '&&', '&=', '&', '(', ')', '*=', '*', ',', '...', '.*', '.', '/=', '/', '::', ':>', ':', ';', '?', '[', ']', '^=', '^', '{', '||', '|=', '|', '}', '~', '++', '+=', '+', '<<=', '<%', '<:', '<<', '<=', '<', '==', '=', '>>=', '>>', '>=', '>'] - -" We build the regexp for the tokenizer -let s:reCComment = '\/\*\|\*\/' -let s:reCppComment = '\/\/' -let s:reComment = s:reCComment.'\|'.s:reCppComment -let s:reCppOperatorOrPunctuator = escape(join(s:cppOperatorPunctuator, '\|'), '*./^~[]') - - -" Tokenize a c++ code -" a token is dictionary where keys are: -" - kind = cppKeyword|cppWord|cppOperatorPunctuator|unknown|cComment|cppComment|cppDigit -" - value = 'something' -" Note: a cppWord is any word that is not a cpp keyword -function! omni#cpp#tokenizer#Tokenize(szCode) - let result = [] - - " The regexp to find a token, a token is a keyword, word or - " c++ operator or punctuator. To work properly we have to put - " spaces and tabs to our regexp. - let reTokenSearch = '\(\w\+\)\|\s\+\|'.s:reComment.'\|'.s:reCppOperatorOrPunctuator - " eg: 'using namespace std;' - " ^ ^ - " start=0 end=5 - let startPos = 0 - let endPos = matchend(a:szCode, reTokenSearch) - let len = endPos-startPos - while endPos!=-1 - " eg: 'using namespace std;' - " ^ ^ - " start=0 end=5 - " token = 'using' - " We also remove space and tabs - let token = substitute(strpart(a:szCode, startPos, len), '\s', '', 'g') - - " eg: 'using namespace std;' - " ^ ^ - " start=5 end=15 - let startPos = endPos - let endPos = matchend(a:szCode, reTokenSearch, startPos) - let len = endPos-startPos - - " It the token is empty we continue - if token=='' - continue - endif - - " Building the token - let resultToken = {'kind' : 'unknown', 'value' : token} - - " Classify the token - if token =~ '^\d\+' - " It's a digit - let resultToken.kind = 'cppDigit' - elseif token=~'^\w\+$' - " It's a word - let resultToken.kind = 'cppWord' - - " But maybe it's a c++ keyword - if match(token, s:reCppKeyword)>=0 - let resultToken.kind = 'cppKeyword' - endif - else - if match(token, s:reComment)>=0 - if index(['/*','*/'],token)>=0 - let resultToken.kind = 'cComment' - else - let resultToken.kind = 'cppComment' - endif - else - " It's an operator - let resultToken.kind = 'cppOperatorPunctuator' - endif - endif - - " We have our token, let's add it to the result list - call extend(result, [resultToken]) - endwhile - - return result -endfunc diff --git a/.vim/autoload/omni/cpp/utils.vim b/.vim/autoload/omni/cpp/utils.vim deleted file mode 100644 index 5d74d34..0000000 --- a/.vim/autoload/omni/cpp/utils.vim +++ /dev/null @@ -1,587 +0,0 @@ -" Description: Omni completion script for cpp files -" Maintainer: Vissale NEANG -" Last Change: 26 sept. 2007 - -let g:omni#cpp#utils#CACHE_TAG_INHERITS = {} -let g:omni#cpp#utils#szFilterGlobalScope = "(!has_key(v:val, 'class') && !has_key(v:val, 'struct') && !has_key(v:val, 'union') && !has_key(v:val, 'namespace')" -let g:omni#cpp#utils#szFilterGlobalScope .= "&& (!has_key(v:val, 'enum') || (has_key(v:val, 'enum') && v:val.enum =~ '^\\w\\+$')))" - -" Expression used to ignore comments -" Note: this expression drop drastically the performance -"let omni#cpp#utils#expIgnoreComments = 'match(synIDattr(synID(line("."), col("."), 1), "name"), '\CcComment')!=-1' -" This one is faster but not really good for C comments -let omni#cpp#utils#reIgnoreComment = escape('\/\/\|\/\*\|\*\/', '*/\') -let omni#cpp#utils#expIgnoreComments = 'getline(".") =~ g:omni#cpp#utils#reIgnoreComment' - -" Characters to escape in a filename for vimgrep -"TODO: Find more characters to escape -let omni#cpp#utils#szEscapedCharacters = ' %#' - -" Resolve the path of the file -" TODO: absolute file path -function! omni#cpp#utils#ResolveFilePath(szFile) - let result = '' - let listPath = split(globpath(&path, a:szFile), "\n") - if len(listPath) - let result = listPath[0] - endif - return simplify(result) -endfunc - -" Get code without comments and with empty strings -" szSingleLine must not have carriage return -function! omni#cpp#utils#GetCodeFromLine(szSingleLine) - " We set all strings to empty strings, it's safer for - " the next of the process - let szResult = substitute(a:szSingleLine, '".*"', '""', 'g') - - " Removing c++ comments, we can use the pattern ".*" because - " we are modifying a line - let szResult = substitute(szResult, '\/\/.*', '', 'g') - - " Now we have the entire code in one line and we can remove C comments - return s:RemoveCComments(szResult) -endfunc - -" Remove C comments on a line -function! s:RemoveCComments(szLine) - let result = a:szLine - - " We have to match the first '/*' and first '*/' - let startCmt = match(result, '\/\*') - let endCmt = match(result, '\*\/') - while startCmt!=-1 && endCmt!=-1 && startCmt0 - let result = result[ : startCmt-1 ] . result[ endCmt+2 : ] - else - " Case where '/*' is at the start of the line - let result = result[ endCmt+2 : ] - endif - let startCmt = match(result, '\/\*') - let endCmt = match(result, '\*\/') - endwhile - return result -endfunc - -" Get a c++ code from current buffer from [lineStart, colStart] to -" [lineEnd, colEnd] without c++ and c comments, without end of line -" and with empty strings if any -" @return a string -function! omni#cpp#utils#GetCode(posStart, posEnd) - let posStart = a:posStart - let posEnd = a:posEnd - if a:posStart[0]>a:posEnd[0] - let posStart = a:posEnd - let posEnd = a:posStart - elseif a:posStart[0]==a:posEnd[0] && a:posStart[1]>a:posEnd[1] - let posStart = a:posEnd - let posEnd = a:posStart - endif - - " Getting the lines - let lines = getline(posStart[0], posEnd[0]) - let lenLines = len(lines) - - " Formatting the result - let result = '' - if lenLines==1 - let sStart = posStart[1]-1 - let sEnd = posEnd[1]-1 - let line = lines[0] - let lenLastLine = strlen(line) - let sEnd = (sEnd>lenLastLine)?lenLastLine : sEnd - if sStart >= 0 - let result = omni#cpp#utils#GetCodeFromLine(line[ sStart : sEnd ]) - endif - elseif lenLines>1 - let sStart = posStart[1]-1 - let sEnd = posEnd[1]-1 - let lenLastLine = strlen(lines[-1]) - let sEnd = (sEnd>lenLastLine)?lenLastLine : sEnd - if sStart >= 0 - let lines[0] = lines[0][ sStart : ] - let lines[-1] = lines[-1][ : sEnd ] - for aLine in lines - let result = result . omni#cpp#utils#GetCodeFromLine(aLine)." " - endfor - let result = result[:-2] - endif - endif - - " Now we have the entire code in one line and we can remove C comments - return s:RemoveCComments(result) -endfunc - -" Extract the scope (context) of a tag item -" eg: ::MyNamespace -" @return a string of the scope. a scope from tag always starts with '::' -function! omni#cpp#utils#ExtractScope(tagItem) - let listKindScope = ['class', 'struct', 'union', 'namespace', 'enum'] - let szResult = '::' - for scope in listKindScope - if has_key(a:tagItem, scope) - let szResult = szResult . a:tagItem[scope] - break - endif - endfor - return szResult -endfunc - -" Simplify scope string, remove consecutive '::' if any -function! omni#cpp#utils#SimplifyScope(szScope) - let szResult = substitute(a:szScope, '\(::\)\+', '::', 'g') - if szResult=='::' - return szResult - else - return substitute(szResult, '::$', '', 'g') - endif -endfunc - -" Check if the cursor is in comment -function! omni#cpp#utils#IsCursorInCommentOrString() - return match(synIDattr(synID(line("."), col(".")-1, 1), "name"), '\C\=0 -endfunc - -" Tokenize the current instruction until the cursor position. -" @return list of tokens -function! omni#cpp#utils#TokenizeCurrentInstruction(...) - let szAppendText = '' - if a:0>0 - let szAppendText = a:1 - endif - - let startPos = searchpos('[;{}]\|\%^', 'bWn') - let curPos = getpos('.')[1:2] - " We don't want the character under the cursor - let column = curPos[1]-1 - let curPos[1] = (column<1)?1:column - return omni#cpp#tokenizer#Tokenize(omni#cpp#utils#GetCode(startPos, curPos)[1:] . szAppendText) -endfunc - -" Tokenize the current instruction until the word under the cursor. -" @return list of tokens -function! omni#cpp#utils#TokenizeCurrentInstructionUntilWord() - let startPos = searchpos('[;{}]\|\%^', 'bWn') - - " Saving the current cursor pos - let originalPos = getpos('.') - - " We go at the end of the word - execute 'normal gee' - let curPos = getpos('.')[1:2] - - " Restoring the original cursor pos - call setpos('.', originalPos) - - let szCode = omni#cpp#utils#GetCode(startPos, curPos)[1:] - return omni#cpp#tokenizer#Tokenize(szCode) -endfunc - -" Build parenthesis groups -" add a new key 'group' in the token -" where value is the group number of the parenthesis -" eg: (void*)(MyClass*) -" group1 group0 -" if a parenthesis is unresolved the group id is -1 -" @return a copy of a:tokens with parenthesis group -function! omni#cpp#utils#BuildParenthesisGroups(tokens) - let tokens = copy(a:tokens) - let kinds = {'(': '()', ')' : '()', '[' : '[]', ']' : '[]', '<' : '<>', '>' : '<>', '{': '{}', '}': '{}'} - let unresolved = {'()' : [], '[]': [], '<>' : [], '{}' : []} - let groupId = 0 - - " Note: we build paren group in a backward way - " because we can often have parenthesis unbalanced - " instruction - " eg: doSomething(_member.get()-> - for token in reverse(tokens) - if index([')', ']', '>', '}'], token.value)>=0 - let token['group'] = groupId - call extend(unresolved[kinds[token.value]], [token]) - let groupId+=1 - elseif index(['(', '[', '<', '{'], token.value)>=0 - if len(unresolved[kinds[token.value]]) - let tokenResolved = remove(unresolved[kinds[token.value]], -1) - let token['group'] = tokenResolved.group - else - let token['group'] = -1 - endif - endif - endfor - - return reverse(tokens) -endfunc - -" Determine if tokens represent a C cast -" @return -" - itemCast -" - itemCppCast -" - itemVariable -" - itemThis -function! omni#cpp#utils#GetCastType(tokens) - " Note: a:tokens is not modified - let tokens = omni#cpp#utils#SimplifyParenthesis(omni#cpp#utils#BuildParenthesisGroups(a:tokens)) - - if tokens[0].value == '(' - return 'itemCast' - elseif index(['static_cast', 'dynamic_cast', 'reinterpret_cast', 'const_cast'], tokens[0].value)>=0 - return 'itemCppCast' - else - for token in tokens - if token.value=='this' - return 'itemThis' - endif - endfor - return 'itemVariable' - endif -endfunc - -" Remove useless parenthesis -function! omni#cpp#utils#SimplifyParenthesis(tokens) - "Note: a:tokens is not modified - let tokens = a:tokens - " We remove useless parenthesis eg: (((MyClass))) - if len(tokens)>2 - while tokens[0].value=='(' && tokens[-1].value==')' && tokens[0].group==tokens[-1].group - let tokens = tokens[1:-2] - endwhile - endif - return tokens -endfunc - -" Function create a type info -function! omni#cpp#utils#CreateTypeInfo(param) - let type = type(a:param) - return {'type': type, 'value':a:param} -endfunc - -" Extract type info from a tag item -" eg: ::MyNamespace::MyClass -function! omni#cpp#utils#ExtractTypeInfoFromTag(tagItem) - let szTypeInfo = omni#cpp#utils#ExtractScope(a:tagItem) . '::' . substitute(a:tagItem.name, '.*::', '', 'g') - return omni#cpp#utils#SimplifyScope(szTypeInfo) -endfunc - -" Build a class inheritance list -function! omni#cpp#utils#GetClassInheritanceList(namespaces, typeInfo) - let result = [] - for tagItem in omni#cpp#utils#GetResolvedTags(a:namespaces, a:typeInfo) - call extend(result, [omni#cpp#utils#ExtractTypeInfoFromTag(tagItem)]) - endfor - return result -endfunc - -" Get class inheritance list where items in the list are tag items. -" TODO: Verify inheritance order -function! omni#cpp#utils#GetResolvedTags(namespaces, typeInfo) - let result = [] - let tagItem = omni#cpp#utils#GetResolvedTagItem(a:namespaces, a:typeInfo) - if tagItem!={} - let szTypeInfo = omni#cpp#utils#ExtractTypeInfoFromTag(tagItem) - if has_key(g:omni#cpp#utils#CACHE_TAG_INHERITS, szTypeInfo) - let result = g:omni#cpp#utils#CACHE_TAG_INHERITS[szTypeInfo] - else - call extend(result, [tagItem]) - if has_key(tagItem, 'inherits') - for baseClassTypeInfo in split(tagItem.inherits, ',') - let namespaces = [omni#cpp#utils#ExtractScope(tagItem), '::'] - call extend(result, omni#cpp#utils#GetResolvedTags(namespaces, omni#cpp#utils#CreateTypeInfo(baseClassTypeInfo))) - endfor - endif - let g:omni#cpp#utils#CACHE_TAG_INHERITS[szTypeInfo] = result - endif - endif - return result -endfunc - -" Get a tag item after a scope resolution and typedef resolution -function! omni#cpp#utils#GetResolvedTagItem(namespaces, typeInfo) - let typeInfo = {} - if type(a:typeInfo) == 1 - let typeInfo = omni#cpp#utils#CreateTypeInfo(a:typeInfo) - else - let typeInfo = a:typeInfo - endif - - let result = {} - if !omni#cpp#utils#IsTypeInfoValid(typeInfo) - return result - endif - - " Unnamed type case eg: '1::2' - if typeInfo.type == 4 - " Here there is no typedef or namespace to resolve, the tagInfo.value is a tag item - " representing a variable ('v') a member ('m') or a typedef ('t') and the typename is - " always in global scope - return typeInfo.value - endif - - " Named type case eg: 'MyNamespace::MyClass' - let szTypeInfo = omni#cpp#utils#GetTypeInfoString(typeInfo) - - " Resolving namespace alias - " TODO: For the next release - "let szTypeInfo = omni#cpp#namespaces#ResolveAlias(g:omni#cpp#namespaces#CacheAlias, szTypeInfo) - - if szTypeInfo=='::' - return result - endif - - " We can only get members of class, struct, union and namespace - let szTagFilter = "index(['c', 's', 'u', 'n', 't'], v:val.kind[0])>=0" - let szTagQuery = szTypeInfo - - if s:IsTypeInfoResolved(szTypeInfo) - " The type info is already resolved, we remove the starting '::' - let szTagQuery = substitute(szTypeInfo, '^::', '', 'g') - if len(split(szTagQuery, '::'))==1 - " eg: ::MyClass - " Here we have to get tags that have no parent scope - " That's why we change the szTagFilter - let szTagFilter .= '&& ' . g:omni#cpp#utils#szFilterGlobalScope - let tagList = omni#common#utils#TagListNoThrow('^'.szTagQuery.'$') - call filter(tagList, szTagFilter) - if len(tagList) - let result = tagList[0] - endif - else - " eg: ::MyNamespace::MyClass - let tagList = omni#common#utils#TagListNoThrow('^'.szTagQuery.'$') - call filter(tagList, szTagFilter) - - if len(tagList) - let result = tagList[0] - endif - endif - else - " The type is not resolved - let tagList = omni#common#utils#TagListNoThrow('^'.szTagQuery.'$') - call filter(tagList, szTagFilter) - - if len(tagList) - " Resolving scope (namespace, nested class etc...) - let szScopeOfTypeInfo = s:ExtractScopeFromTypeInfo(szTypeInfo) - if s:IsTypeInfoResolved(szTypeInfo) - let result = s:GetTagOfSameScope(tagList, szScopeOfTypeInfo) - else - " For each namespace of the namespace list we try to get a tag - " that can be in the same scope - if g:OmniCpp_NamespaceSearch && &filetype != 'c' - for scope in a:namespaces - let szTmpScope = omni#cpp#utils#SimplifyScope(scope.'::'.szScopeOfTypeInfo) - let result = s:GetTagOfSameScope(tagList, szTmpScope) - if result!={} - break - endif - endfor - else - let szTmpScope = omni#cpp#utils#SimplifyScope('::'.szScopeOfTypeInfo) - let result = s:GetTagOfSameScope(tagList, szTmpScope) - endif - endif - endif - endif - - if result!={} - " We have our tagItem but maybe it's a typedef or an unnamed type - if result.kind[0]=='t' - " Here we can have a typedef to another typedef, a class, struct, union etc - " but we can also have a typedef to an unnamed type, in that - " case the result contains a 'typeref' key - let namespaces = [omni#cpp#utils#ExtractScope(result), '::'] - if has_key(result, 'typeref') - let result = omni#cpp#utils#GetResolvedTagItem(namespaces, omni#cpp#utils#CreateTypeInfo(result)) - else - let szCmd = omni#cpp#utils#ExtractCmdFromTagItem(result) - let szCode = substitute(omni#cpp#utils#GetCodeFromLine(szCmd), '\C\<'.result.name.'\>.*', '', 'g') - let szTypeInfo = omni#cpp#utils#ExtractTypeInfoFromTokens(omni#cpp#tokenizer#Tokenize(szCode)) - let result = omni#cpp#utils#GetResolvedTagItem(namespaces, omni#cpp#utils#CreateTypeInfo(szTypeInfo)) - " TODO: Namespace resolution for result - endif - endif - endif - - return result -endfunc - -" Returns if the type info is valid -" @return -" - 1 if valid -" - 0 otherwise -function! omni#cpp#utils#IsTypeInfoValid(typeInfo) - if a:typeInfo=={} - return 0 - else - if a:typeInfo.type == 1 && a:typeInfo.value=='' - " String case - return 0 - elseif a:typeInfo.type == 4 && a:typeInfo.value=={} - " Dictionary case - return 0 - endif - endif - return 1 -endfunc - -" Get the string of the type info -function! omni#cpp#utils#GetTypeInfoString(typeInfo) - if a:typeInfo.type == 1 - return a:typeInfo.value - else - return substitute(a:typeInfo.value.typeref, '^\w\+:', '', 'g') - endif -endfunc - -" A resolved type info starts with '::' -" @return -" - 1 if type info starts with '::' -" - 0 otherwise -function! s:IsTypeInfoResolved(szTypeInfo) - return match(a:szTypeInfo, '^::')!=-1 -endfunc - -" A returned type info's scope may not have the global namespace '::' -" eg: '::NameSpace1::NameSpace2::MyClass' => '::NameSpace1::NameSpace2' -" 'NameSpace1::NameSpace2::MyClass' => 'NameSpace1::NameSpace2' -function! s:ExtractScopeFromTypeInfo(szTypeInfo) - let szScope = substitute(a:szTypeInfo, '\w\+$', '', 'g') - if szScope =='::' - return szScope - else - return substitute(szScope, '::$', '', 'g') - endif -endfunc - -" @return -" - the tag with the same scope -" - {} otherwise -function! s:GetTagOfSameScope(listTags, szScopeToMatch) - for tagItem in a:listTags - let szScopeOfTag = omni#cpp#utils#ExtractScope(tagItem) - if szScopeOfTag == a:szScopeToMatch - return tagItem - endif - endfor - return {} -endfunc - -" Extract the cmd of a tag item without regexp -function! omni#cpp#utils#ExtractCmdFromTagItem(tagItem) - let line = a:tagItem.cmd - let re = '\(\/\^\)\|\(\$\/\)' - if match(line, re)!=-1 - let line = substitute(line, re, '', 'g') - return line - else - " TODO: the cmd is a line number - return '' - endif -endfunc - -" Extract type from tokens. -" eg: examples of tokens format -" 'const MyClass&' -" 'const map < int, int >&' -" 'MyNs::MyClass' -" '::MyClass**' -" 'MyClass a, *b = NULL, c[1] = {}; -" 'hello(MyClass a, MyClass* b' -" @return the type info string eg: ::std::map -" can be empty -function! omni#cpp#utils#ExtractTypeInfoFromTokens(tokens) - let szResult = '' - let state = 0 - - let tokens = omni#cpp#utils#BuildParenthesisGroups(a:tokens) - - " If there is an unbalanced parenthesis we are in a parameter list - let bParameterList = 0 - for token in tokens - if token.value == '(' && token.group==-1 - let bParameterList = 1 - break - endif - endfor - - if bParameterList - let tokens = reverse(tokens) - let state = 0 - let parenGroup = -1 - for token in tokens - if state==0 - if token.value=='>' - let parenGroup = token.group - let state=1 - elseif token.kind == 'cppWord' - let szResult = token.value.szResult - let state=2 - elseif index(['*', '&'], token.value)<0 - break - endif - elseif state==1 - if token.value=='<' && token.group==parenGroup - let state=0 - endif - elseif state==2 - if token.value=='::' - let szResult = token.value.szResult - let state=3 - else - break - endif - elseif state==3 - if token.kind == 'cppWord' - let szResult = token.value.szResult - let state=2 - else - break - endif - endif - endfor - return szResult - endif - - for token in tokens - if state==0 - if token.value == '::' - let szResult .= token.value - let state = 1 - elseif token.kind == 'cppWord' - let szResult .= token.value - let state = 2 - " Maybe end of token - endif - elseif state==1 - if token.kind == 'cppWord' - let szResult .= token.value - let state = 2 - " Maybe end of token - else - break - endif - elseif state==2 - if token.value == '::' - let szResult .= token.value - let state = 1 - else - break - endif - endif - endfor - return szResult -endfunc - -" Get the preview window string -function! omni#cpp#utils#GetPreviewWindowStringFromTagItem(tagItem) - let szResult = '' - - let szResult .= 'name: '.a:tagItem.name."\n" - for tagKey in keys(a:tagItem) - if index(['name', 'static'], tagKey)>=0 - continue - endif - let szResult .= tagKey.': '.a:tagItem[tagKey]."\n" - endfor - - return substitute(szResult, "\n$", '', 'g') -endfunc diff --git a/.vim/doc/tags b/.vim/doc/tags deleted file mode 100644 index fcfdafd..0000000 --- a/.vim/doc/tags +++ /dev/null @@ -1,1492 +0,0 @@ -'Tlist_Auto_Highlight_Tag' taglist.txt /*'Tlist_Auto_Highlight_Tag'* -'Tlist_Auto_Open' taglist.txt /*'Tlist_Auto_Open'* -'Tlist_Auto_Update' taglist.txt /*'Tlist_Auto_Update'* -'Tlist_Close_On_Select' taglist.txt /*'Tlist_Close_On_Select'* -'Tlist_Compact_Format' taglist.txt /*'Tlist_Compact_Format'* -'Tlist_Ctags_Cmd' taglist.txt /*'Tlist_Ctags_Cmd'* -'Tlist_Display_Prototype' taglist.txt /*'Tlist_Display_Prototype'* -'Tlist_Display_Tag_Scope' taglist.txt /*'Tlist_Display_Tag_Scope'* -'Tlist_Enable_Fold_Column' taglist.txt /*'Tlist_Enable_Fold_Column'* -'Tlist_Exit_OnlyWindow' taglist.txt /*'Tlist_Exit_OnlyWindow'* -'Tlist_File_Fold_Auto_Close' taglist.txt /*'Tlist_File_Fold_Auto_Close'* -'Tlist_GainFocus_On_ToggleOpen' taglist.txt /*'Tlist_GainFocus_On_ToggleOpen'* -'Tlist_Highlight_Tag_On_BufEnter' taglist.txt /*'Tlist_Highlight_Tag_On_BufEnter'* -'Tlist_Inc_Winwidth' taglist.txt /*'Tlist_Inc_Winwidth'* -'Tlist_Max_Submenu_Items' taglist.txt /*'Tlist_Max_Submenu_Items'* -'Tlist_Max_Tag_Length' taglist.txt /*'Tlist_Max_Tag_Length'* -'Tlist_Process_File_Always' taglist.txt /*'Tlist_Process_File_Always'* -'Tlist_Show_Menu' taglist.txt /*'Tlist_Show_Menu'* -'Tlist_Show_One_File' taglist.txt /*'Tlist_Show_One_File'* -'Tlist_Sort_Type' taglist.txt /*'Tlist_Sort_Type'* -'Tlist_Use_Horiz_Window' taglist.txt /*'Tlist_Use_Horiz_Window'* -'Tlist_Use_Right_Window' taglist.txt /*'Tlist_Use_Right_Window'* -'Tlist_Use_SingleClick' taglist.txt /*'Tlist_Use_SingleClick'* -'Tlist_WinHeight' taglist.txt /*'Tlist_WinHeight'* -'Tlist_WinWidth' taglist.txt /*'Tlist_WinWidth'* -:CVSEdit vcscommand.txt /*:CVSEdit* -:CVSEditors vcscommand.txt /*:CVSEditors* -:CVSUnedit vcscommand.txt /*:CVSUnedit* -:CVSWatch vcscommand.txt /*:CVSWatch* -:CVSWatchAdd vcscommand.txt /*:CVSWatchAdd* -:CVSWatchOff vcscommand.txt /*:CVSWatchOff* -:CVSWatchOn vcscommand.txt /*:CVSWatchOn* -:CVSWatchRemove vcscommand.txt /*:CVSWatchRemove* -:CVSWatchers vcscommand.txt /*:CVSWatchers* -:NERDTree NERD_tree.txt /*:NERDTree* -:NERDTreeToggle NERD_tree.txt /*:NERDTreeToggle* -:TlistAddFiles taglist.txt /*:TlistAddFiles* -:TlistAddFilesRecursive taglist.txt /*:TlistAddFilesRecursive* -:TlistClose taglist.txt /*:TlistClose* -:TlistDebug taglist.txt /*:TlistDebug* -:TlistHighlightTag taglist.txt /*:TlistHighlightTag* -:TlistLock taglist.txt /*:TlistLock* -:TlistMessages taglist.txt /*:TlistMessages* -:TlistOpen taglist.txt /*:TlistOpen* -:TlistSessionLoad taglist.txt /*:TlistSessionLoad* -:TlistSessionSave taglist.txt /*:TlistSessionSave* -:TlistShowPrototype taglist.txt /*:TlistShowPrototype* -:TlistShowTag taglist.txt /*:TlistShowTag* -:TlistToggle taglist.txt /*:TlistToggle* -:TlistUndebug taglist.txt /*:TlistUndebug* -:TlistUnlock taglist.txt /*:TlistUnlock* -:TlistUpdate taglist.txt /*:TlistUpdate* -:VCSAdd vcscommand.txt /*:VCSAdd* -:VCSAnnotate vcscommand.txt /*:VCSAnnotate* -:VCSBlame vcscommand.txt /*:VCSBlame* -:VCSCommit vcscommand.txt /*:VCSCommit* -:VCSDelete vcscommand.txt /*:VCSDelete* -:VCSDiff vcscommand.txt /*:VCSDiff* -:VCSGotoOriginal vcscommand.txt /*:VCSGotoOriginal* -:VCSInfo vcscommand.txt /*:VCSInfo* -:VCSLock vcscommand.txt /*:VCSLock* -:VCSLog vcscommand.txt /*:VCSLog* -:VCSRemove vcscommand.txt /*:VCSRemove* -:VCSRevert vcscommand.txt /*:VCSRevert* -:VCSReview vcscommand.txt /*:VCSReview* -:VCSStatus vcscommand.txt /*:VCSStatus* -:VCSUnlock vcscommand.txt /*:VCSUnlock* -:VCSUpdate vcscommand.txt /*:VCSUpdate* -:VCSVimDiff vcscommand.txt /*:VCSVimDiff* -C-Reference crefvim.txt /*C-Reference* -NERDChristmasTree NERD_tree.txt /*NERDChristmasTree* -NERDTree NERD_tree.txt /*NERDTree* -NERDTree-! NERD_tree.txt /*NERDTree-!* -NERDTree-? NERD_tree.txt /*NERDTree-?* -NERDTree-C NERD_tree.txt /*NERDTree-C* -NERDTree-F NERD_tree.txt /*NERDTree-F* -NERDTree-H NERD_tree.txt /*NERDTree-H* -NERDTree-J NERD_tree.txt /*NERDTree-J* -NERDTree-K NERD_tree.txt /*NERDTree-K* -NERDTree-O NERD_tree.txt /*NERDTree-O* -NERDTree-P NERD_tree.txt /*NERDTree-P* -NERDTree-R NERD_tree.txt /*NERDTree-R* -NERDTree-T NERD_tree.txt /*NERDTree-T* -NERDTree-U NERD_tree.txt /*NERDTree-U* -NERDTree-X NERD_tree.txt /*NERDTree-X* -NERDTree-c-j NERD_tree.txt /*NERDTree-c-j* -NERDTree-c-k NERD_tree.txt /*NERDTree-c-k* -NERDTree-contents NERD_tree.txt /*NERDTree-contents* -NERDTree-e NERD_tree.txt /*NERDTree-e* -NERDTree-f NERD_tree.txt /*NERDTree-f* -NERDTree-go NERD_tree.txt /*NERDTree-go* -NERDTree-gtab NERD_tree.txt /*NERDTree-gtab* -NERDTree-m NERD_tree.txt /*NERDTree-m* -NERDTree-o NERD_tree.txt /*NERDTree-o* -NERDTree-p NERD_tree.txt /*NERDTree-p* -NERDTree-q NERD_tree.txt /*NERDTree-q* -NERDTree-r NERD_tree.txt /*NERDTree-r* -NERDTree-t NERD_tree.txt /*NERDTree-t* -NERDTree-tab NERD_tree.txt /*NERDTree-tab* -NERDTree-u NERD_tree.txt /*NERDTree-u* -NERDTree-x NERD_tree.txt /*NERDTree-x* -NERDTreeAuthor NERD_tree.txt /*NERDTreeAuthor* -NERDTreeAutoCenter NERD_tree.txt /*NERDTreeAutoCenter* -NERDTreeAutoCenterThreshold NERD_tree.txt /*NERDTreeAutoCenterThreshold* -NERDTreeCaseSensitiveSort NERD_tree.txt /*NERDTreeCaseSensitiveSort* -NERDTreeChDirMode NERD_tree.txt /*NERDTreeChDirMode* -NERDTreeChangelog NERD_tree.txt /*NERDTreeChangelog* -NERDTreeCommands NERD_tree.txt /*NERDTreeCommands* -NERDTreeCredits NERD_tree.txt /*NERDTreeCredits* -NERDTreeFilesysMenu NERD_tree.txt /*NERDTreeFilesysMenu* -NERDTreeFunctionality NERD_tree.txt /*NERDTreeFunctionality* -NERDTreeHighlightCursorline NERD_tree.txt /*NERDTreeHighlightCursorline* -NERDTreeIgnore NERD_tree.txt /*NERDTreeIgnore* -NERDTreeMappings NERD_tree.txt /*NERDTreeMappings* -NERDTreeMouseMode NERD_tree.txt /*NERDTreeMouseMode* -NERDTreeOptionDetails NERD_tree.txt /*NERDTreeOptionDetails* -NERDTreeOptionSummary NERD_tree.txt /*NERDTreeOptionSummary* -NERDTreeOptions NERD_tree.txt /*NERDTreeOptions* -NERDTreePublicFunctions NERD_tree.txt /*NERDTreePublicFunctions* -NERDTreeShowFiles NERD_tree.txt /*NERDTreeShowFiles* -NERDTreeShowHidden NERD_tree.txt /*NERDTreeShowHidden* -NERDTreeSortOrder NERD_tree.txt /*NERDTreeSortOrder* -NERDTreeSplitVertical NERD_tree.txt /*NERDTreeSplitVertical* -NERDTreeTodo NERD_tree.txt /*NERDTreeTodo* -NERDTreeWinPos NERD_tree.txt /*NERDTreeWinPos* -NERDTreeWinSize NERD_tree.txt /*NERDTreeWinSize* -NERD_tree.txt NERD_tree.txt /*NERD_tree.txt* -OmniCpp_DefaultNamespaces omnicppcomplete.txt /*OmniCpp_DefaultNamespaces* -OmniCpp_DisplayMode omnicppcomplete.txt /*OmniCpp_DisplayMode* -OmniCpp_GlobalScopeSearch omnicppcomplete.txt /*OmniCpp_GlobalScopeSearch* -OmniCpp_LocalSearchDecl omnicppcomplete.txt /*OmniCpp_LocalSearchDecl* -OmniCpp_MayCompleteArrow omnicppcomplete.txt /*OmniCpp_MayCompleteArrow* -OmniCpp_MayCompleteDot omnicppcomplete.txt /*OmniCpp_MayCompleteDot* -OmniCpp_MayCompleteScope omnicppcomplete.txt /*OmniCpp_MayCompleteScope* -OmniCpp_NamespaceSearch omnicppcomplete.txt /*OmniCpp_NamespaceSearch* -OmniCpp_SelectFirstItem omnicppcomplete.txt /*OmniCpp_SelectFirstItem* -OmniCpp_ShowAccess omnicppcomplete.txt /*OmniCpp_ShowAccess* -OmniCpp_ShowPrototypeInAbbr omnicppcomplete.txt /*OmniCpp_ShowPrototypeInAbbr* -OmniCpp_ShowScopeInAbbr omnicppcomplete.txt /*OmniCpp_ShowScopeInAbbr* -Tlist_Get_Tag_Prototype_By_Line() taglist.txt /*Tlist_Get_Tag_Prototype_By_Line()* -Tlist_Get_Tagname_By_Line() taglist.txt /*Tlist_Get_Tagname_By_Line()* -Tlist_Set_App() taglist.txt /*Tlist_Set_App()* -Tlist_Update_File_Tags() taglist.txt /*Tlist_Update_File_Tags()* -VCSCommandCVSDiffOpt vcscommand.txt /*VCSCommandCVSDiffOpt* -VCSCommandCVSExec vcscommand.txt /*VCSCommandCVSExec* -VCSCommandCommitOnWrite vcscommand.txt /*VCSCommandCommitOnWrite* -VCSCommandDeleteOnHide vcscommand.txt /*VCSCommandDeleteOnHide* -VCSCommandDiffSplit vcscommand.txt /*VCSCommandDiffSplit* -VCSCommandDisableExtensionMappings vcscommand.txt /*VCSCommandDisableExtensionMappings* -VCSCommandDisableMappings vcscommand.txt /*VCSCommandDisableMappings* -VCSCommandEdit vcscommand.txt /*VCSCommandEdit* -VCSCommandEnableBufferSetup vcscommand.txt /*VCSCommandEnableBufferSetup* -VCSCommandResultBufferNameExtension vcscommand.txt /*VCSCommandResultBufferNameExtension* -VCSCommandResultBufferNameFunction vcscommand.txt /*VCSCommandResultBufferNameFunction* -VCSCommandSVKExec vcscommand.txt /*VCSCommandSVKExec* -VCSCommandSVNDiffExt vcscommand.txt /*VCSCommandSVNDiffExt* -VCSCommandSVNDiffOpt vcscommand.txt /*VCSCommandSVNDiffOpt* -VCSCommandSVNExec vcscommand.txt /*VCSCommandSVNExec* -VCSCommandSplit vcscommand.txt /*VCSCommandSplit* -b:VCSCommandCommand vcscommand.txt /*b:VCSCommandCommand* -b:VCSCommandOriginalBuffer vcscommand.txt /*b:VCSCommandOriginalBuffer* -b:VCSCommandSourceFile vcscommand.txt /*b:VCSCommandSourceFile* -b:VCSCommandVCSType vcscommand.txt /*b:VCSCommandVCSType* -crefvim crefvim.txt /*crefvim* -crefvim.txt crefvim.txt /*crefvim.txt* -crefvimdoc crefvimdoc.txt /*crefvimdoc* -crefvimdoc.txt crefvimdoc.txt /*crefvimdoc.txt* -crv-# crefvim.txt /*crv-#* -crv-## crefvim.txt /*crv-##* -crv-#define crefvim.txt /*crv-#define* -crv-#elif crefvim.txt /*crv-#elif* -crv-#else crefvim.txt /*crv-#else* -crv-#endif crefvim.txt /*crv-#endif* -crv-#error crefvim.txt /*crv-#error* -crv-#if crefvim.txt /*crv-#if* -crv-#ifdef crefvim.txt /*crv-#ifdef* -crv-#ifndef crefvim.txt /*crv-#ifndef* -crv-#include crefvim.txt /*crv-#include* -crv-#line crefvim.txt /*crv-#line* -crv-#pragma crefvim.txt /*crv-#pragma* -crv-#undef crefvim.txt /*crv-#undef* -crv-BUFSIZ crefvim.txt /*crv-BUFSIZ* -crv-CHAR_BIT crefvim.txt /*crv-CHAR_BIT* -crv-CHAR_MAX crefvim.txt /*crv-CHAR_MAX* -crv-CHAR_MIN crefvim.txt /*crv-CHAR_MIN* -crv-CLOCKS_PER_SEC crefvim.txt /*crv-CLOCKS_PER_SEC* -crv-CX_LIMITED_RANGE crefvim.txt /*crv-CX_LIMITED_RANGE* -crv-DBL_DIG crefvim.txt /*crv-DBL_DIG* -crv-DBL_EPSILON crefvim.txt /*crv-DBL_EPSILON* -crv-DBL_MANT_DIG crefvim.txt /*crv-DBL_MANT_DIG* -crv-DBL_MAX crefvim.txt /*crv-DBL_MAX* -crv-DBL_MAX_10_EXP crefvim.txt /*crv-DBL_MAX_10_EXP* -crv-DBL_MAX_EXP crefvim.txt /*crv-DBL_MAX_EXP* -crv-DBL_MIN crefvim.txt /*crv-DBL_MIN* -crv-DBL_MIN_10_EXP crefvim.txt /*crv-DBL_MIN_10_EXP* -crv-DBL_MIN_EXP crefvim.txt /*crv-DBL_MIN_EXP* -crv-EDOM crefvim.txt /*crv-EDOM* -crv-EILSEQ crefvim.txt /*crv-EILSEQ* -crv-EOF crefvim.txt /*crv-EOF* -crv-ERANGE crefvim.txt /*crv-ERANGE* -crv-EXIT_FAILURE crefvim.txt /*crv-EXIT_FAILURE* -crv-EXIT_SUCCESS crefvim.txt /*crv-EXIT_SUCCESS* -crv-FENV_ACCESS crefvim.txt /*crv-FENV_ACCESS* -crv-FE_ALL_EXCEPT crefvim.txt /*crv-FE_ALL_EXCEPT* -crv-FE_DIVBYZERO crefvim.txt /*crv-FE_DIVBYZERO* -crv-FE_DOWNWARD crefvim.txt /*crv-FE_DOWNWARD* -crv-FE_INEXACT crefvim.txt /*crv-FE_INEXACT* -crv-FE_INVALID crefvim.txt /*crv-FE_INVALID* -crv-FE_OVERFLOW crefvim.txt /*crv-FE_OVERFLOW* -crv-FE_TONEAREST crefvim.txt /*crv-FE_TONEAREST* -crv-FE_TOWARDZERO crefvim.txt /*crv-FE_TOWARDZERO* -crv-FE_UNDERFLOW crefvim.txt /*crv-FE_UNDERFLOW* -crv-FE_UPWARD crefvim.txt /*crv-FE_UPWARD* -crv-FILE crefvim.txt /*crv-FILE* -crv-FILENAME_MAX crefvim.txt /*crv-FILENAME_MAX* -crv-FLT_DIG crefvim.txt /*crv-FLT_DIG* -crv-FLT_EPSILON crefvim.txt /*crv-FLT_EPSILON* -crv-FLT_MANT_DIG crefvim.txt /*crv-FLT_MANT_DIG* -crv-FLT_MAX crefvim.txt /*crv-FLT_MAX* -crv-FLT_MAX_10_EXP crefvim.txt /*crv-FLT_MAX_10_EXP* -crv-FLT_MAX_EXP crefvim.txt /*crv-FLT_MAX_EXP* -crv-FLT_MIN crefvim.txt /*crv-FLT_MIN* -crv-FLT_MIN_10_EXP crefvim.txt /*crv-FLT_MIN_10_EXP* -crv-FLT_MIN_EXP crefvim.txt /*crv-FLT_MIN_EXP* -crv-FLT_RADIX crefvim.txt /*crv-FLT_RADIX* -crv-FLT_ROUNDS crefvim.txt /*crv-FLT_ROUNDS* -crv-FOPEN_MAX crefvim.txt /*crv-FOPEN_MAX* -crv-FP_FAST_FMA crefvim.txt /*crv-FP_FAST_FMA* -crv-FP_FAST_FMAF crefvim.txt /*crv-FP_FAST_FMAF* -crv-FP_FAST_FMAL crefvim.txt /*crv-FP_FAST_FMAL* -crv-FP_ILOGB0 crefvim.txt /*crv-FP_ILOGB0* -crv-FP_ILOGBNAN crefvim.txt /*crv-FP_ILOGBNAN* -crv-HUGE_VAL crefvim.txt /*crv-HUGE_VAL* -crv-HUGE_VALF crefvim.txt /*crv-HUGE_VALF* -crv-HUGE_VALL crefvim.txt /*crv-HUGE_VALL* -crv-I crefvim.txt /*crv-I* -crv-INT16_C crefvim.txt /*crv-INT16_C* -crv-INT16_MAX crefvim.txt /*crv-INT16_MAX* -crv-INT16_MIN crefvim.txt /*crv-INT16_MIN* -crv-INT32_C crefvim.txt /*crv-INT32_C* -crv-INT32_MAX crefvim.txt /*crv-INT32_MAX* -crv-INT32_MIN crefvim.txt /*crv-INT32_MIN* -crv-INT64_C crefvim.txt /*crv-INT64_C* -crv-INT64_MAX crefvim.txt /*crv-INT64_MAX* -crv-INT64_MIN crefvim.txt /*crv-INT64_MIN* -crv-INT8_C crefvim.txt /*crv-INT8_C* -crv-INT8_MAX crefvim.txt /*crv-INT8_MAX* -crv-INT8_MIN crefvim.txt /*crv-INT8_MIN* -crv-INTMAX_C crefvim.txt /*crv-INTMAX_C* -crv-INTMAX_MAX crefvim.txt /*crv-INTMAX_MAX* -crv-INTMAX_MIN crefvim.txt /*crv-INTMAX_MIN* -crv-INTPTR_MAX crefvim.txt /*crv-INTPTR_MAX* -crv-INTPTR_MIN crefvim.txt /*crv-INTPTR_MIN* -crv-INT_FAST16_MAX crefvim.txt /*crv-INT_FAST16_MAX* -crv-INT_FAST16_MIN crefvim.txt /*crv-INT_FAST16_MIN* -crv-INT_FAST32_MAX crefvim.txt /*crv-INT_FAST32_MAX* -crv-INT_FAST32_MIN crefvim.txt /*crv-INT_FAST32_MIN* -crv-INT_FAST64_MAX crefvim.txt /*crv-INT_FAST64_MAX* -crv-INT_FAST64_MIN crefvim.txt /*crv-INT_FAST64_MIN* -crv-INT_FAST8_MAX crefvim.txt /*crv-INT_FAST8_MAX* -crv-INT_FAST8_MIN crefvim.txt /*crv-INT_FAST8_MIN* -crv-INT_LEAST16_MAX crefvim.txt /*crv-INT_LEAST16_MAX* -crv-INT_LEAST16_MIN crefvim.txt /*crv-INT_LEAST16_MIN* -crv-INT_LEAST32_MAX crefvim.txt /*crv-INT_LEAST32_MAX* -crv-INT_LEAST32_MIN crefvim.txt /*crv-INT_LEAST32_MIN* -crv-INT_LEAST64_MAX crefvim.txt /*crv-INT_LEAST64_MAX* -crv-INT_LEAST64_MIN crefvim.txt /*crv-INT_LEAST64_MIN* -crv-INT_LEAST8_MAX crefvim.txt /*crv-INT_LEAST8_MAX* -crv-INT_LEAST8_MIN crefvim.txt /*crv-INT_LEAST8_MIN* -crv-INT_MAX crefvim.txt /*crv-INT_MAX* -crv-INT_MIN crefvim.txt /*crv-INT_MIN* -crv-LC_ALL crefvim.txt /*crv-LC_ALL* -crv-LC_COLLATE crefvim.txt /*crv-LC_COLLATE* -crv-LC_CTYPE crefvim.txt /*crv-LC_CTYPE* -crv-LC_MONETARY crefvim.txt /*crv-LC_MONETARY* -crv-LC_NUMERIC crefvim.txt /*crv-LC_NUMERIC* -crv-LDBL_DIG crefvim.txt /*crv-LDBL_DIG* -crv-LDBL_EPSILON crefvim.txt /*crv-LDBL_EPSILON* -crv-LDBL_MANT_DIG crefvim.txt /*crv-LDBL_MANT_DIG* -crv-LDBL_MAX crefvim.txt /*crv-LDBL_MAX* -crv-LDBL_MAX_10_EXP crefvim.txt /*crv-LDBL_MAX_10_EXP* -crv-LDBL_MAX_EXP crefvim.txt /*crv-LDBL_MAX_EXP* -crv-LDBL_MIN crefvim.txt /*crv-LDBL_MIN* -crv-LDBL_MIN_10_EXP crefvim.txt /*crv-LDBL_MIN_10_EXP* -crv-LDBL_MIN_EXP crefvim.txt /*crv-LDBL_MIN_EXP* -crv-LONG_LONG_MAX crefvim.txt /*crv-LONG_LONG_MAX* -crv-LONG_LONG_MIN crefvim.txt /*crv-LONG_LONG_MIN* -crv-LONG_MAX crefvim.txt /*crv-LONG_MAX* -crv-LONG_MIN crefvim.txt /*crv-LONG_MIN* -crv-L_tmpnam crefvim.txt /*crv-L_tmpnam* -crv-MB_CUR_MAX crefvim.txt /*crv-MB_CUR_MAX* -crv-MB_LEN_MAX crefvim.txt /*crv-MB_LEN_MAX* -crv-NDEBUG crefvim.txt /*crv-NDEBUG* -crv-NULL crefvim.txt /*crv-NULL* -crv-NULL2 crefvim.txt /*crv-NULL2* -crv-NULL3 crefvim.txt /*crv-NULL3* -crv-NULL4 crefvim.txt /*crv-NULL4* -crv-NULL5 crefvim.txt /*crv-NULL5* -crv-NULL6 crefvim.txt /*crv-NULL6* -crv-PRIXFASTN crefvim.txt /*crv-PRIXFASTN* -crv-PRIXLEASTN crefvim.txt /*crv-PRIXLEASTN* -crv-PRIXMAX crefvim.txt /*crv-PRIXMAX* -crv-PRIXN crefvim.txt /*crv-PRIXN* -crv-PRIXPTR crefvim.txt /*crv-PRIXPTR* -crv-PRIdFASTN crefvim.txt /*crv-PRIdFASTN* -crv-PRIdLEASTN crefvim.txt /*crv-PRIdLEASTN* -crv-PRIdMAX crefvim.txt /*crv-PRIdMAX* -crv-PRIdN crefvim.txt /*crv-PRIdN* -crv-PRIdPTR crefvim.txt /*crv-PRIdPTR* -crv-PRIiFASTN crefvim.txt /*crv-PRIiFASTN* -crv-PRIiLEASTN crefvim.txt /*crv-PRIiLEASTN* -crv-PRIiMAX crefvim.txt /*crv-PRIiMAX* -crv-PRIiN crefvim.txt /*crv-PRIiN* -crv-PRIiPTR crefvim.txt /*crv-PRIiPTR* -crv-PRIoFASTN crefvim.txt /*crv-PRIoFASTN* -crv-PRIoLEASTN crefvim.txt /*crv-PRIoLEASTN* -crv-PRIoMAX crefvim.txt /*crv-PRIoMAX* -crv-PRIoN crefvim.txt /*crv-PRIoN* -crv-PRIoPTR crefvim.txt /*crv-PRIoPTR* -crv-PRIuFASTN crefvim.txt /*crv-PRIuFASTN* -crv-PRIuLEASTN crefvim.txt /*crv-PRIuLEASTN* -crv-PRIuMAX crefvim.txt /*crv-PRIuMAX* -crv-PRIuN crefvim.txt /*crv-PRIuN* -crv-PRIuPTR crefvim.txt /*crv-PRIuPTR* -crv-PRIxFASTN crefvim.txt /*crv-PRIxFASTN* -crv-PRIxLEASTN crefvim.txt /*crv-PRIxLEASTN* -crv-PRIxMAX crefvim.txt /*crv-PRIxMAX* -crv-PRIxN crefvim.txt /*crv-PRIxN* -crv-PRIxPTR crefvim.txt /*crv-PRIxPTR* -crv-PTRDIFF_MAX crefvim.txt /*crv-PTRDIFF_MAX* -crv-PTRDIFF_MIN crefvim.txt /*crv-PTRDIFF_MIN* -crv-PreInc crefvim.txt /*crv-PreInc* -crv-RAND_MAX crefvim.txt /*crv-RAND_MAX* -crv-SCHAR_MAX crefvim.txt /*crv-SCHAR_MAX* -crv-SCHAR_MIN crefvim.txt /*crv-SCHAR_MIN* -crv-SCNdFASTN crefvim.txt /*crv-SCNdFASTN* -crv-SCNdLEASTN crefvim.txt /*crv-SCNdLEASTN* -crv-SCNdMAX crefvim.txt /*crv-SCNdMAX* -crv-SCNdN crefvim.txt /*crv-SCNdN* -crv-SCNdPTR crefvim.txt /*crv-SCNdPTR* -crv-SCNiFASTN crefvim.txt /*crv-SCNiFASTN* -crv-SCNiLEASTN crefvim.txt /*crv-SCNiLEASTN* -crv-SCNiMAX crefvim.txt /*crv-SCNiMAX* -crv-SCNiN crefvim.txt /*crv-SCNiN* -crv-SCNiPTR crefvim.txt /*crv-SCNiPTR* -crv-SCNoFASTN crefvim.txt /*crv-SCNoFASTN* -crv-SCNoLEASTN crefvim.txt /*crv-SCNoLEASTN* -crv-SCNoMAX crefvim.txt /*crv-SCNoMAX* -crv-SCNoN crefvim.txt /*crv-SCNoN* -crv-SCNoPTR crefvim.txt /*crv-SCNoPTR* -crv-SCNuFASTN crefvim.txt /*crv-SCNuFASTN* -crv-SCNuLEASTN crefvim.txt /*crv-SCNuLEASTN* -crv-SCNuMAX crefvim.txt /*crv-SCNuMAX* -crv-SCNuN crefvim.txt /*crv-SCNuN* -crv-SCNuPTR crefvim.txt /*crv-SCNuPTR* -crv-SCNxFASTN crefvim.txt /*crv-SCNxFASTN* -crv-SCNxLEASTN crefvim.txt /*crv-SCNxLEASTN* -crv-SCNxMAX crefvim.txt /*crv-SCNxMAX* -crv-SCNxN crefvim.txt /*crv-SCNxN* -crv-SCNxPTR crefvim.txt /*crv-SCNxPTR* -crv-SEEK_CUR crefvim.txt /*crv-SEEK_CUR* -crv-SEEK_END crefvim.txt /*crv-SEEK_END* -crv-SEEK_SET crefvim.txt /*crv-SEEK_SET* -crv-SHRT_MAX crefvim.txt /*crv-SHRT_MAX* -crv-SHRT_MIN crefvim.txt /*crv-SHRT_MIN* -crv-SIGABRT crefvim.txt /*crv-SIGABRT* -crv-SIGFPE crefvim.txt /*crv-SIGFPE* -crv-SIGILL crefvim.txt /*crv-SIGILL* -crv-SIGINT crefvim.txt /*crv-SIGINT* -crv-SIGSEGV crefvim.txt /*crv-SIGSEGV* -crv-SIGTERM crefvim.txt /*crv-SIGTERM* -crv-SIG_ATOMIC_MAX crefvim.txt /*crv-SIG_ATOMIC_MAX* -crv-SIG_ATOMIC_MIN crefvim.txt /*crv-SIG_ATOMIC_MIN* -crv-SIG_DFL crefvim.txt /*crv-SIG_DFL* -crv-SIG_ERR crefvim.txt /*crv-SIG_ERR* -crv-SIG_IGN crefvim.txt /*crv-SIG_IGN* -crv-SIZE_MAX crefvim.txt /*crv-SIZE_MAX* -crv-TMP_MAX crefvim.txt /*crv-TMP_MAX* -crv-UCHAR_MAX crefvim.txt /*crv-UCHAR_MAX* -crv-UINT16_C crefvim.txt /*crv-UINT16_C* -crv-UINT16_MAX crefvim.txt /*crv-UINT16_MAX* -crv-UINT32_C crefvim.txt /*crv-UINT32_C* -crv-UINT32_MAX crefvim.txt /*crv-UINT32_MAX* -crv-UINT64_C crefvim.txt /*crv-UINT64_C* -crv-UINT64_MAX crefvim.txt /*crv-UINT64_MAX* -crv-UINT8_C crefvim.txt /*crv-UINT8_C* -crv-UINT8_MAX crefvim.txt /*crv-UINT8_MAX* -crv-UINTMAX_C crefvim.txt /*crv-UINTMAX_C* -crv-UINTMAX_MAX crefvim.txt /*crv-UINTMAX_MAX* -crv-UINTPTR_MAX crefvim.txt /*crv-UINTPTR_MAX* -crv-UINT_FAST16_MAX crefvim.txt /*crv-UINT_FAST16_MAX* -crv-UINT_FAST32_MAX crefvim.txt /*crv-UINT_FAST32_MAX* -crv-UINT_FAST64_MAX crefvim.txt /*crv-UINT_FAST64_MAX* -crv-UINT_FAST8_MAX crefvim.txt /*crv-UINT_FAST8_MAX* -crv-UINT_LEAST16_MAX crefvim.txt /*crv-UINT_LEAST16_MAX* -crv-UINT_LEAST32_MAX crefvim.txt /*crv-UINT_LEAST32_MAX* -crv-UINT_LEAST64_MAX crefvim.txt /*crv-UINT_LEAST64_MAX* -crv-UINT_LEAST8_MAX crefvim.txt /*crv-UINT_LEAST8_MAX* -crv-UINT_MAX crefvim.txt /*crv-UINT_MAX* -crv-ULONG_LONG_MAX crefvim.txt /*crv-ULONG_LONG_MAX* -crv-ULONG_MAX crefvim.txt /*crv-ULONG_MAX* -crv-USHRT_MAX crefvim.txt /*crv-USHRT_MAX* -crv-WCHAR_MAX crefvim.txt /*crv-WCHAR_MAX* -crv-WCHAR_MAX2 crefvim.txt /*crv-WCHAR_MAX2* -crv-WCHAR_MIN crefvim.txt /*crv-WCHAR_MIN* -crv-WCHAR_MIN2 crefvim.txt /*crv-WCHAR_MIN2* -crv-WEOF crefvim.txt /*crv-WEOF* -crv-WEOF2 crefvim.txt /*crv-WEOF2* -crv-WINT_MAX crefvim.txt /*crv-WINT_MAX* -crv-WINT_MIN crefvim.txt /*crv-WINT_MIN* -crv-_Bool crefvim.txt /*crv-_Bool* -crv-_Complex crefvim.txt /*crv-_Complex* -crv-_Complex_I crefvim.txt /*crv-_Complex_I* -crv-_Exit crefvim.txt /*crv-_Exit* -crv-_IOFBF crefvim.txt /*crv-_IOFBF* -crv-_IOLBF crefvim.txt /*crv-_IOLBF* -crv-_IONBF crefvim.txt /*crv-_IONBF* -crv-_Imaginary crefvim.txt /*crv-_Imaginary* -crv-_Imaginary_I crefvim.txt /*crv-_Imaginary_I* -crv-__DATA__ crefvim.txt /*crv-__DATA__* -crv-__FILE__ crefvim.txt /*crv-__FILE__* -crv-__LINE__ crefvim.txt /*crv-__LINE__* -crv-__STDC_FORMAT_MACROS crefvim.txt /*crv-__STDC_FORMAT_MACROS* -crv-__STDC_HOSTED__ crefvim.txt /*crv-__STDC_HOSTED__* -crv-__STDC_IEC_559_COMPLEX__ crefvim.txt /*crv-__STDC_IEC_559_COMPLEX__* -crv-__STDC_IEC_559__ crefvim.txt /*crv-__STDC_IEC_559__* -crv-__STDC_ISO10646__ crefvim.txt /*crv-__STDC_ISO10646__* -crv-__STDC_LIMIT_MACROS crefvim.txt /*crv-__STDC_LIMIT_MACROS* -crv-__STDC_VERSION__ crefvim.txt /*crv-__STDC_VERSION__* -crv-__STDC__ crefvim.txt /*crv-__STDC__* -crv-__TIME__ crefvim.txt /*crv-__TIME__* -crv-__bool_true_false_are_defined crefvim.txt /*crv-__bool_true_false_are_defined* -crv-abort crefvim.txt /*crv-abort* -crv-abs crefvim.txt /*crv-abs* -crv-acos crefvim.txt /*crv-acos* -crv-acosf crefvim.txt /*crv-acosf* -crv-acosh crefvim.txt /*crv-acosh* -crv-acoshf crefvim.txt /*crv-acoshf* -crv-acoshl crefvim.txt /*crv-acoshl* -crv-acosl crefvim.txt /*crv-acosl* -crv-asctime crefvim.txt /*crv-asctime* -crv-asin crefvim.txt /*crv-asin* -crv-asinf crefvim.txt /*crv-asinf* -crv-asinh crefvim.txt /*crv-asinh* -crv-asinhf crefvim.txt /*crv-asinhf* -crv-asinhl crefvim.txt /*crv-asinhl* -crv-asinl crefvim.txt /*crv-asinl* -crv-assert crefvim.txt /*crv-assert* -crv-atan crefvim.txt /*crv-atan* -crv-atan2 crefvim.txt /*crv-atan2* -crv-atan2f crefvim.txt /*crv-atan2f* -crv-atan2l crefvim.txt /*crv-atan2l* -crv-atanf crefvim.txt /*crv-atanf* -crv-atanh crefvim.txt /*crv-atanh* -crv-atanhf crefvim.txt /*crv-atanhf* -crv-atanhl crefvim.txt /*crv-atanhl* -crv-atanl crefvim.txt /*crv-atanl* -crv-atexit crefvim.txt /*crv-atexit* -crv-atof crefvim.txt /*crv-atof* -crv-atoi crefvim.txt /*crv-atoi* -crv-atol crefvim.txt /*crv-atol* -crv-atoll crefvim.txt /*crv-atoll* -crv-auto crefvim.txt /*crv-auto* -crv-bibliography crefvim.txt /*crv-bibliography* -crv-bool crefvim.txt /*crv-bool* -crv-break crefvim.txt /*crv-break* -crv-bsearch crefvim.txt /*crv-bsearch* -crv-btowc crefvim.txt /*crv-btowc* -crv-cabs crefvim.txt /*crv-cabs* -crv-cabsf crefvim.txt /*crv-cabsf* -crv-cabsl crefvim.txt /*crv-cabsl* -crv-cacos crefvim.txt /*crv-cacos* -crv-cacosf crefvim.txt /*crv-cacosf* -crv-cacosh crefvim.txt /*crv-cacosh* -crv-cacoshf crefvim.txt /*crv-cacoshf* -crv-cacoshl crefvim.txt /*crv-cacoshl* -crv-cacosl crefvim.txt /*crv-cacosl* -crv-calloc crefvim.txt /*crv-calloc* -crv-carg crefvim.txt /*crv-carg* -crv-cargf crefvim.txt /*crv-cargf* -crv-cargl crefvim.txt /*crv-cargl* -crv-case crefvim.txt /*crv-case* -crv-casin crefvim.txt /*crv-casin* -crv-casinf crefvim.txt /*crv-casinf* -crv-casinh crefvim.txt /*crv-casinh* -crv-casinhf crefvim.txt /*crv-casinhf* -crv-casinhl crefvim.txt /*crv-casinhl* -crv-casinl crefvim.txt /*crv-casinl* -crv-catan crefvim.txt /*crv-catan* -crv-catanf crefvim.txt /*crv-catanf* -crv-catanh crefvim.txt /*crv-catanh* -crv-catanhf crefvim.txt /*crv-catanhf* -crv-catanhl crefvim.txt /*crv-catanhl* -crv-catanl crefvim.txt /*crv-catanl* -crv-cbrt crefvim.txt /*crv-cbrt* -crv-cbrtf crefvim.txt /*crv-cbrtf* -crv-cbrtl crefvim.txt /*crv-cbrtl* -crv-ccos crefvim.txt /*crv-ccos* -crv-ccosf crefvim.txt /*crv-ccosf* -crv-ccosfh crefvim.txt /*crv-ccosfh* -crv-ccosh crefvim.txt /*crv-ccosh* -crv-ccosl crefvim.txt /*crv-ccosl* -crv-ccoslh crefvim.txt /*crv-ccoslh* -crv-ceil crefvim.txt /*crv-ceil* -crv-ceilf crefvim.txt /*crv-ceilf* -crv-ceill crefvim.txt /*crv-ceill* -crv-cexp crefvim.txt /*crv-cexp* -crv-cexpf crefvim.txt /*crv-cexpf* -crv-cexpl crefvim.txt /*crv-cexpl* -crv-char crefvim.txt /*crv-char* -crv-cimag crefvim.txt /*crv-cimag* -crv-cimagf crefvim.txt /*crv-cimagf* -crv-cimagl crefvim.txt /*crv-cimagl* -crv-clearerr crefvim.txt /*crv-clearerr* -crv-clock crefvim.txt /*crv-clock* -crv-clock_t crefvim.txt /*crv-clock_t* -crv-clog crefvim.txt /*crv-clog* -crv-clogf crefvim.txt /*crv-clogf* -crv-clogl crefvim.txt /*crv-clogl* -crv-complex crefvim.txt /*crv-complex* -crv-conj crefvim.txt /*crv-conj* -crv-conjf crefvim.txt /*crv-conjf* -crv-conjl crefvim.txt /*crv-conjl* -crv-const crefvim.txt /*crv-const* -crv-continue crefvim.txt /*crv-continue* -crv-copysign crefvim.txt /*crv-copysign* -crv-copysignf crefvim.txt /*crv-copysignf* -crv-copysignl crefvim.txt /*crv-copysignl* -crv-cos crefvim.txt /*crv-cos* -crv-cosf crefvim.txt /*crv-cosf* -crv-cosh crefvim.txt /*crv-cosh* -crv-coshf crefvim.txt /*crv-coshf* -crv-coshl crefvim.txt /*crv-coshl* -crv-cosl crefvim.txt /*crv-cosl* -crv-cpow crefvim.txt /*crv-cpow* -crv-cpowf crefvim.txt /*crv-cpowf* -crv-cpowl crefvim.txt /*crv-cpowl* -crv-cproj crefvim.txt /*crv-cproj* -crv-cprojf crefvim.txt /*crv-cprojf* -crv-cprojl crefvim.txt /*crv-cprojl* -crv-creal crefvim.txt /*crv-creal* -crv-crealf crefvim.txt /*crv-crealf* -crv-creall crefvim.txt /*crv-creall* -crv-csin crefvim.txt /*crv-csin* -crv-csinf crefvim.txt /*crv-csinf* -crv-csinh crefvim.txt /*crv-csinh* -crv-csinhf crefvim.txt /*crv-csinhf* -crv-csinhl crefvim.txt /*crv-csinhl* -crv-csinl crefvim.txt /*crv-csinl* -crv-csqrt crefvim.txt /*crv-csqrt* -crv-csqrtf crefvim.txt /*crv-csqrtf* -crv-csqrtl crefvim.txt /*crv-csqrtl* -crv-ctan crefvim.txt /*crv-ctan* -crv-ctanf crefvim.txt /*crv-ctanf* -crv-ctanh crefvim.txt /*crv-ctanh* -crv-ctanhf crefvim.txt /*crv-ctanhf* -crv-ctanhl crefvim.txt /*crv-ctanhl* -crv-ctanl crefvim.txt /*crv-ctanl* -crv-ctime crefvim.txt /*crv-ctime* -crv-currency_symbol crefvim.txt /*crv-currency_symbol* -crv-datatypes crefvim.txt /*crv-datatypes* -crv-decimal_point crefvim.txt /*crv-decimal_point* -crv-default crefvim.txt /*crv-default* -crv-defined crefvim.txt /*crv-defined* -crv-dif_t crefvim.txt /*crv-dif_t* -crv-difftime crefvim.txt /*crv-difftime* -crv-div crefvim.txt /*crv-div* -crv-do crefvim.txt /*crv-do* -crv-double crefvim.txt /*crv-double* -crv-dtArrays crefvim.txt /*crv-dtArrays* -crv-dtBitFields crefvim.txt /*crv-dtBitFields* -crv-dtCompleteArrayDecl crefvim.txt /*crv-dtCompleteArrayDecl* -crv-dtConstChar crefvim.txt /*crv-dtConstChar* -crv-dtConstFloat crefvim.txt /*crv-dtConstFloat* -crv-dtConstInt crefvim.txt /*crv-dtConstInt* -crv-dtConstants crefvim.txt /*crv-dtConstants* -crv-dtEnumerate crefvim.txt /*crv-dtEnumerate* -crv-dtFormats crefvim.txt /*crv-dtFormats* -crv-dtFormatsFPBasics crefvim.txt /*crv-dtFormatsFPBasics* -crv-dtFormatsFPDouble crefvim.txt /*crv-dtFormatsFPDouble* -crv-dtFormatsFPFloat crefvim.txt /*crv-dtFormatsFPFloat* -crv-dtFormatsFPInfinity crefvim.txt /*crv-dtFormatsFPInfinity* -crv-dtFormatsFPLDouble crefvim.txt /*crv-dtFormatsFPLDouble* -crv-dtFormatsFPNaN crefvim.txt /*crv-dtFormatsFPNaN* -crv-dtFormatsFPOp crefvim.txt /*crv-dtFormatsFPOp* -crv-dtFormatsFPSDenorm crefvim.txt /*crv-dtFormatsFPSDenorm* -crv-dtFormatsFPTypes crefvim.txt /*crv-dtFormatsFPTypes* -crv-dtFormatsFPValues crefvim.txt /*crv-dtFormatsFPValues* -crv-dtFormatsFPZero crefvim.txt /*crv-dtFormatsFPZero* -crv-dtFormatsFloat crefvim.txt /*crv-dtFormatsFloat* -crv-dtFormatsInt crefvim.txt /*crv-dtFormatsInt* -crv-dtOverview crefvim.txt /*crv-dtOverview* -crv-dtPointers crefvim.txt /*crv-dtPointers* -crv-dtPtrArithmetics crefvim.txt /*crv-dtPtrArithmetics* -crv-dtPtrFuncs crefvim.txt /*crv-dtPtrFuncs* -crv-dtPtrVars crefvim.txt /*crv-dtPtrVars* -crv-dtQualifiers crefvim.txt /*crv-dtQualifiers* -crv-dtSizeRange crefvim.txt /*crv-dtSizeRange* -crv-dtStorageClasses crefvim.txt /*crv-dtStorageClasses* -crv-dtStrings crefvim.txt /*crv-dtStrings* -crv-dtStructAccess crefvim.txt /*crv-dtStructAccess* -crv-dtStructDecl crefvim.txt /*crv-dtStructDecl* -crv-dtStructDef crefvim.txt /*crv-dtStructDef* -crv-dtStructInit crefvim.txt /*crv-dtStructInit* -crv-dtStructurs crefvim.txt /*crv-dtStructurs* -crv-dtTypeCast crefvim.txt /*crv-dtTypeCast* -crv-dtTypeCastExpl crefvim.txt /*crv-dtTypeCastExpl* -crv-dtTypeCastImpl crefvim.txt /*crv-dtTypeCastImpl* -crv-dtTypeDef crefvim.txt /*crv-dtTypeDef* -crv-dtTypeGrouping crefvim.txt /*crv-dtTypeGrouping* -crv-dtTypeSpecifiers crefvim.txt /*crv-dtTypeSpecifiers* -crv-dtUnionAccess crefvim.txt /*crv-dtUnionAccess* -crv-dtUnionDecl crefvim.txt /*crv-dtUnionDecl* -crv-dtUnionDef crefvim.txt /*crv-dtUnionDef* -crv-dtUnionInit crefvim.txt /*crv-dtUnionInit* -crv-dtUnions crefvim.txt /*crv-dtUnions* -crv-dtVoid crefvim.txt /*crv-dtVoid* -crv-else crefvim.txt /*crv-else* -crv-enum crefvim.txt /*crv-enum* -crv-erf crefvim.txt /*crv-erf* -crv-erfc crefvim.txt /*crv-erfc* -crv-erfcf crefvim.txt /*crv-erfcf* -crv-erfcl crefvim.txt /*crv-erfcl* -crv-erff crefvim.txt /*crv-erff* -crv-erfl crefvim.txt /*crv-erfl* -crv-errno crefvim.txt /*crv-errno* -crv-exit crefvim.txt /*crv-exit* -crv-exp crefvim.txt /*crv-exp* -crv-exp2 crefvim.txt /*crv-exp2* -crv-exp2f crefvim.txt /*crv-exp2f* -crv-exp2l crefvim.txt /*crv-exp2l* -crv-expf crefvim.txt /*crv-expf* -crv-expl crefvim.txt /*crv-expl* -crv-expm1 crefvim.txt /*crv-expm1* -crv-expm1f crefvim.txt /*crv-expm1f* -crv-expm1l crefvim.txt /*crv-expm1l* -crv-extern crefvim.txt /*crv-extern* -crv-fabs crefvim.txt /*crv-fabs* -crv-fabsf crefvim.txt /*crv-fabsf* -crv-fabsl crefvim.txt /*crv-fabsl* -crv-false crefvim.txt /*crv-false* -crv-fclose crefvim.txt /*crv-fclose* -crv-fdim crefvim.txt /*crv-fdim* -crv-fdimf crefvim.txt /*crv-fdimf* -crv-fdiml crefvim.txt /*crv-fdiml* -crv-feclearexcept crefvim.txt /*crv-feclearexcept* -crv-fegetenv crefvim.txt /*crv-fegetenv* -crv-fegetexceptflag crefvim.txt /*crv-fegetexceptflag* -crv-fegetround crefvim.txt /*crv-fegetround* -crv-feholdexcept crefvim.txt /*crv-feholdexcept* -crv-fentv_t crefvim.txt /*crv-fentv_t* -crv-feof crefvim.txt /*crv-feof* -crv-feraiseexcept crefvim.txt /*crv-feraiseexcept* -crv-ferror crefvim.txt /*crv-ferror* -crv-fesetenv crefvim.txt /*crv-fesetenv* -crv-fesetexceptflag crefvim.txt /*crv-fesetexceptflag* -crv-fesetround crefvim.txt /*crv-fesetround* -crv-fetestexcept crefvim.txt /*crv-fetestexcept* -crv-feupdateenv crefvim.txt /*crv-feupdateenv* -crv-fflush crefvim.txt /*crv-fflush* -crv-fgetc crefvim.txt /*crv-fgetc* -crv-fgetpos crefvim.txt /*crv-fgetpos* -crv-fgets crefvim.txt /*crv-fgets* -crv-fgetwc crefvim.txt /*crv-fgetwc* -crv-fgetws crefvim.txt /*crv-fgetws* -crv-float crefvim.txt /*crv-float* -crv-floor crefvim.txt /*crv-floor* -crv-floorf crefvim.txt /*crv-floorf* -crv-floorl crefvim.txt /*crv-floorl* -crv-fma crefvim.txt /*crv-fma* -crv-fmaf crefvim.txt /*crv-fmaf* -crv-fmal crefvim.txt /*crv-fmal* -crv-fmax crefvim.txt /*crv-fmax* -crv-fmaxf crefvim.txt /*crv-fmaxf* -crv-fmaxl crefvim.txt /*crv-fmaxl* -crv-fmin crefvim.txt /*crv-fmin* -crv-fminf crefvim.txt /*crv-fminf* -crv-fminl crefvim.txt /*crv-fminl* -crv-fmod crefvim.txt /*crv-fmod* -crv-fmodf crefvim.txt /*crv-fmodf* -crv-fmodl crefvim.txt /*crv-fmodl* -crv-fopen crefvim.txt /*crv-fopen* -crv-for crefvim.txt /*crv-for* -crv-fpclassify crefvim.txt /*crv-fpclassify* -crv-fpos_t crefvim.txt /*crv-fpos_t* -crv-fprintf crefvim.txt /*crv-fprintf* -crv-fputc crefvim.txt /*crv-fputc* -crv-fputs crefvim.txt /*crv-fputs* -crv-fputwc crefvim.txt /*crv-fputwc* -crv-fputws crefvim.txt /*crv-fputws* -crv-frac_digits crefvim.txt /*crv-frac_digits* -crv-fread crefvim.txt /*crv-fread* -crv-free crefvim.txt /*crv-free* -crv-freopen crefvim.txt /*crv-freopen* -crv-frexp crefvim.txt /*crv-frexp* -crv-frexpf crefvim.txt /*crv-frexpf* -crv-frexpl crefvim.txt /*crv-frexpl* -crv-fscanf crefvim.txt /*crv-fscanf* -crv-fseek crefvim.txt /*crv-fseek* -crv-fsetpos crefvim.txt /*crv-fsetpos* -crv-ftell crefvim.txt /*crv-ftell* -crv-fuConversion crefvim.txt /*crv-fuConversion* -crv-fuDefVarPara crefvim.txt /*crv-fuDefVarPara* -crv-fuDefinition crefvim.txt /*crv-fuDefinition* -crv-fuMain crefvim.txt /*crv-fuMain* -crv-fuPrototype crefvim.txt /*crv-fuPrototype* -crv-fuSpecifier crefvim.txt /*crv-fuSpecifier* -crv-fuStorageClasses crefvim.txt /*crv-fuStorageClasses* -crv-functions crefvim.txt /*crv-functions* -crv-fwide crefvim.txt /*crv-fwide* -crv-fwprintf crefvim.txt /*crv-fwprintf* -crv-fwrite crefvim.txt /*crv-fwrite* -crv-fwscanf crefvim.txt /*crv-fwscanf* -crv-getc crefvim.txt /*crv-getc* -crv-getchar crefvim.txt /*crv-getchar* -crv-getenv crefvim.txt /*crv-getenv* -crv-gets crefvim.txt /*crv-gets* -crv-getwc crefvim.txt /*crv-getwc* -crv-getwchar crefvim.txt /*crv-getwchar* -crv-gloAlignment crefvim.txt /*crv-gloAlignment* -crv-gloArgument crefvim.txt /*crv-gloArgument* -crv-gloArray crefvim.txt /*crv-gloArray* -crv-gloBinary crefvim.txt /*crv-gloBinary* -crv-gloBlock crefvim.txt /*crv-gloBlock* -crv-gloCompState crefvim.txt /*crv-gloCompState* -crv-gloDataType crefvim.txt /*crv-gloDataType* -crv-gloDeclaration crefvim.txt /*crv-gloDeclaration* -crv-gloDefinition crefvim.txt /*crv-gloDefinition* -crv-gloExpression crefvim.txt /*crv-gloExpression* -crv-gloIdentifier crefvim.txt /*crv-gloIdentifier* -crv-gloLifetime crefvim.txt /*crv-gloLifetime* -crv-gloLinkage crefvim.txt /*crv-gloLinkage* -crv-gloLvalue crefvim.txt /*crv-gloLvalue* -crv-gloLvalueMod crefvim.txt /*crv-gloLvalueMod* -crv-gloMacro crefvim.txt /*crv-gloMacro* -crv-gloObject crefvim.txt /*crv-gloObject* -crv-gloOpBinary crefvim.txt /*crv-gloOpBinary* -crv-gloOpUnary crefvim.txt /*crv-gloOpUnary* -crv-gloOperand crefvim.txt /*crv-gloOperand* -crv-gloOperator crefvim.txt /*crv-gloOperator* -crv-gloParameter crefvim.txt /*crv-gloParameter* -crv-gloPointer crefvim.txt /*crv-gloPointer* -crv-gloPreprocessor crefvim.txt /*crv-gloPreprocessor* -crv-gloPromote crefvim.txt /*crv-gloPromote* -crv-gloPrototype crefvim.txt /*crv-gloPrototype* -crv-gloRvalue crefvim.txt /*crv-gloRvalue* -crv-gloScope crefvim.txt /*crv-gloScope* -crv-gloSemantics crefvim.txt /*crv-gloSemantics* -crv-gloSideEffect crefvim.txt /*crv-gloSideEffect* -crv-gloSignExtension crefvim.txt /*crv-gloSignExtension* -crv-gloStatement crefvim.txt /*crv-gloStatement* -crv-gloStructure crefvim.txt /*crv-gloStructure* -crv-gloSyntax crefvim.txt /*crv-gloSyntax* -crv-gloToken crefvim.txt /*crv-gloToken* -crv-gloTrueFalse crefvim.txt /*crv-gloTrueFalse* -crv-gloType crefvim.txt /*crv-gloType* -crv-gloTypeCast crefvim.txt /*crv-gloTypeCast* -crv-gloTypeIncomplete crefvim.txt /*crv-gloTypeIncomplete* -crv-gloUnary crefvim.txt /*crv-gloUnary* -crv-gloVariable crefvim.txt /*crv-gloVariable* -crv-gloWhiteSpace crefvim.txt /*crv-gloWhiteSpace* -crv-glossary crefvim.txt /*crv-glossary* -crv-gmtime crefvim.txt /*crv-gmtime* -crv-goto crefvim.txt /*crv-goto* -crv-grouping crefvim.txt /*crv-grouping* -crv-hypot crefvim.txt /*crv-hypot* -crv-hypotf crefvim.txt /*crv-hypotf* -crv-hypotl crefvim.txt /*crv-hypotl* -crv-if crefvim.txt /*crv-if* -crv-ilogb crefvim.txt /*crv-ilogb* -crv-ilogbf crefvim.txt /*crv-ilogbf* -crv-ilogbl crefvim.txt /*crv-ilogbl* -crv-imaginary crefvim.txt /*crv-imaginary* -crv-imaxabs crefvim.txt /*crv-imaxabs* -crv-imaxdiv crefvim.txt /*crv-imaxdiv* -crv-imaxdiv_t crefvim.txt /*crv-imaxdiv_t* -crv-inline crefvim.txt /*crv-inline* -crv-int crefvim.txt /*crv-int* -crv-int16_t crefvim.txt /*crv-int16_t* -crv-int32_t crefvim.txt /*crv-int32_t* -crv-int64_t crefvim.txt /*crv-int64_t* -crv-int8_t crefvim.txt /*crv-int8_t* -crv-int_curr_symbol crefvim.txt /*crv-int_curr_symbol* -crv-int_fast16_t crefvim.txt /*crv-int_fast16_t* -crv-int_fast32_t crefvim.txt /*crv-int_fast32_t* -crv-int_fast64_t crefvim.txt /*crv-int_fast64_t* -crv-int_fast8_t crefvim.txt /*crv-int_fast8_t* -crv-int_frac_digits crefvim.txt /*crv-int_frac_digits* -crv-int_least16_t crefvim.txt /*crv-int_least16_t* -crv-int_least32_t crefvim.txt /*crv-int_least32_t* -crv-int_least64_t crefvim.txt /*crv-int_least64_t* -crv-int_least8_t crefvim.txt /*crv-int_least8_t* -crv-int_n_cs_precedes crefvim.txt /*crv-int_n_cs_precedes* -crv-int_n_sep_by_space crefvim.txt /*crv-int_n_sep_by_space* -crv-int_n_sign_posn crefvim.txt /*crv-int_n_sign_posn* -crv-int_p_cs_precedes crefvim.txt /*crv-int_p_cs_precedes* -crv-int_p_sep_by_space crefvim.txt /*crv-int_p_sep_by_space* -crv-int_p_sign_posn crefvim.txt /*crv-int_p_sign_posn* -crv-intmax_t crefvim.txt /*crv-intmax_t* -crv-intptr_t crefvim.txt /*crv-intptr_t* -crv-intro crefvim.txt /*crv-intro* -crv-isalnum crefvim.txt /*crv-isalnum* -crv-isalpha crefvim.txt /*crv-isalpha* -crv-isblank crefvim.txt /*crv-isblank* -crv-iscntrl crefvim.txt /*crv-iscntrl* -crv-isdigit crefvim.txt /*crv-isdigit* -crv-isfinite crefvim.txt /*crv-isfinite* -crv-isgraph crefvim.txt /*crv-isgraph* -crv-isgreater crefvim.txt /*crv-isgreater* -crv-isgreaterequal crefvim.txt /*crv-isgreaterequal* -crv-isinf crefvim.txt /*crv-isinf* -crv-isless crefvim.txt /*crv-isless* -crv-islessequal crefvim.txt /*crv-islessequal* -crv-islessgreater crefvim.txt /*crv-islessgreater* -crv-islower crefvim.txt /*crv-islower* -crv-isnan crefvim.txt /*crv-isnan* -crv-isnormal crefvim.txt /*crv-isnormal* -crv-isprint crefvim.txt /*crv-isprint* -crv-ispunct crefvim.txt /*crv-ispunct* -crv-isspace crefvim.txt /*crv-isspace* -crv-isunordered crefvim.txt /*crv-isunordered* -crv-isupper crefvim.txt /*crv-isupper* -crv-iswalnum crefvim.txt /*crv-iswalnum* -crv-iswalpha crefvim.txt /*crv-iswalpha* -crv-iswblank crefvim.txt /*crv-iswblank* -crv-iswcntrl crefvim.txt /*crv-iswcntrl* -crv-iswctype crefvim.txt /*crv-iswctype* -crv-iswdigit crefvim.txt /*crv-iswdigit* -crv-iswgraph crefvim.txt /*crv-iswgraph* -crv-iswlower crefvim.txt /*crv-iswlower* -crv-iswprint crefvim.txt /*crv-iswprint* -crv-iswpunct crefvim.txt /*crv-iswpunct* -crv-iswspace crefvim.txt /*crv-iswspace* -crv-iswupper crefvim.txt /*crv-iswupper* -crv-iswxdigit crefvim.txt /*crv-iswxdigit* -crv-isxdigit crefvim.txt /*crv-isxdigit* -crv-jmp_buf crefvim.txt /*crv-jmp_buf* -crv-keywords crefvim.txt /*crv-keywords* -crv-labs crefvim.txt /*crv-labs* -crv-language crefvim.txt /*crv-language* -crv-lconf crefvim.txt /*crv-lconf* -crv-ldexp crefvim.txt /*crv-ldexp* -crv-ldexpf crefvim.txt /*crv-ldexpf* -crv-ldexpl crefvim.txt /*crv-ldexpl* -crv-ldif_t crefvim.txt /*crv-ldif_t* -crv-ldiv crefvim.txt /*crv-ldiv* -crv-lgamma crefvim.txt /*crv-lgamma* -crv-lgammaf crefvim.txt /*crv-lgammaf* -crv-lgammal crefvim.txt /*crv-lgammal* -crv-libAssertH crefvim.txt /*crv-libAssertH* -crv-libCHExpLog crefvim.txt /*crv-libCHExpLog* -crv-libCHHyper crefvim.txt /*crv-libCHHyper* -crv-libCHMac crefvim.txt /*crv-libCHMac* -crv-libCHMani crefvim.txt /*crv-libCHMani* -crv-libCHPower crefvim.txt /*crv-libCHPower* -crv-libCHPrag crefvim.txt /*crv-libCHPrag* -crv-libCHTrig crefvim.txt /*crv-libCHTrig* -crv-libCharHandling crefvim.txt /*crv-libCharHandling* -crv-libCharMapping crefvim.txt /*crv-libCharMapping* -crv-libComplexH crefvim.txt /*crv-libComplexH* -crv-libCtypeH crefvim.txt /*crv-libCtypeH* -crv-libErrnoH crefvim.txt /*crv-libErrnoH* -crv-libFHEnv crefvim.txt /*crv-libFHEnv* -crv-libFHExceptions crefvim.txt /*crv-libFHExceptions* -crv-libFHPrag crefvim.txt /*crv-libFHPrag* -crv-libFHRounding crefvim.txt /*crv-libFHRounding* -crv-libFenvH crefvim.txt /*crv-libFenvH* -crv-libFloatH crefvim.txt /*crv-libFloatH* -crv-libHeaders crefvim.txt /*crv-libHeaders* -crv-libInttypesH crefvim.txt /*crv-libInttypesH* -crv-libIso646H crefvim.txt /*crv-libIso646H* -crv-libLHConv crefvim.txt /*crv-libLHConv* -crv-libLHRange crefvim.txt /*crv-libLHRange* -crv-libLHWidth crefvim.txt /*crv-libLHWidth* -crv-libLimitsH crefvim.txt /*crv-libLimitsH* -crv-libLocHCat crefvim.txt /*crv-libLocHCat* -crv-libLocHFunc crefvim.txt /*crv-libLocHFunc* -crv-libLocHInfo crefvim.txt /*crv-libLocHInfo* -crv-libLocHLoc crefvim.txt /*crv-libLocHLoc* -crv-libLocalH crefvim.txt /*crv-libLocalH* -crv-libMHClass crefvim.txt /*crv-libMHClass* -crv-libMHCmp crefvim.txt /*crv-libMHCmp* -crv-libMHErr crefvim.txt /*crv-libMHErr* -crv-libMHErrGam crefvim.txt /*crv-libMHErrGam* -crv-libMHExpLog crefvim.txt /*crv-libMHExpLog* -crv-libMHHyper crefvim.txt /*crv-libMHHyper* -crv-libMHMani crefvim.txt /*crv-libMHMani* -crv-libMHMisc crefvim.txt /*crv-libMHMisc* -crv-libMHNear crefvim.txt /*crv-libMHNear* -crv-libMHPower crefvim.txt /*crv-libMHPower* -crv-libMHRem crefvim.txt /*crv-libMHRem* -crv-libMHTrig crefvim.txt /*crv-libMHTrig* -crv-libMathH crefvim.txt /*crv-libMathH* -crv-libSHFunc crefvim.txt /*crv-libSHFunc* -crv-libSHSig crefvim.txt /*crv-libSHSig* -crv-libSHTyp crefvim.txt /*crv-libSHTyp* -crv-libSIOHCIO crefvim.txt /*crv-libSIOHCIO* -crv-libSIOHDIO crefvim.txt /*crv-libSIOHDIO* -crv-libSIOHErr crefvim.txt /*crv-libSIOHErr* -crv-libSIOHFAcc crefvim.txt /*crv-libSIOHFAcc* -crv-libSIOHFOp crefvim.txt /*crv-libSIOHFOp* -crv-libSIOHFPos crefvim.txt /*crv-libSIOHFPos* -crv-libSIOHIO crefvim.txt /*crv-libSIOHIO* -crv-libSIOHIOFin crefvim.txt /*crv-libSIOHIOFin* -crv-libSIOHIOFormat crefvim.txt /*crv-libSIOHIOFormat* -crv-libSIOHIOFout crefvim.txt /*crv-libSIOHIOFout* -crv-libSIOHIOFunc crefvim.txt /*crv-libSIOHIOFunc* -crv-libSIOHMac crefvim.txt /*crv-libSIOHMac* -crv-libSIOHStrmFile crefvim.txt /*crv-libSIOHStrmFile* -crv-libSIOHType crefvim.txt /*crv-libSIOHType* -crv-libSLHMac crefvim.txt /*crv-libSLHMac* -crv-libSLHType crefvim.txt /*crv-libSLHType* -crv-libSLHcom crefvim.txt /*crv-libSLHcom* -crv-libSLHintarith crefvim.txt /*crv-libSLHintarith* -crv-libSLHmem crefvim.txt /*crv-libSLHmem* -crv-libSLHmulchar crefvim.txt /*crv-libSLHmulchar* -crv-libSLHmulstrng crefvim.txt /*crv-libSLHmulstrng* -crv-libSLHnum crefvim.txt /*crv-libSLHnum* -crv-libSLHrand crefvim.txt /*crv-libSLHrand* -crv-libSLHsearch crefvim.txt /*crv-libSLHsearch* -crv-libSRHCmp crefvim.txt /*crv-libSRHCmp* -crv-libSRHConcat crefvim.txt /*crv-libSRHConcat* -crv-libSRHCopy crefvim.txt /*crv-libSRHCopy* -crv-libSRHMac crefvim.txt /*crv-libSRHMac* -crv-libSRHMisc crefvim.txt /*crv-libSRHMisc* -crv-libSRHSearch crefvim.txt /*crv-libSRHSearch* -crv-libSRHType crefvim.txt /*crv-libSRHType* -crv-libSdHLExact crefvim.txt /*crv-libSdHLExact* -crv-libSdHLFast crefvim.txt /*crv-libSdHLFast* -crv-libSdHLGreat crefvim.txt /*crv-libSdHLGreat* -crv-libSdHLMin crefvim.txt /*crv-libSdHLMin* -crv-libSdHLOther crefvim.txt /*crv-libSdHLOther* -crv-libSdHLPtr crefvim.txt /*crv-libSdHLPtr* -crv-libSdHMac crefvim.txt /*crv-libSdHMac* -crv-libSdHTExact crefvim.txt /*crv-libSdHTExact* -crv-libSdHTFast crefvim.txt /*crv-libSdHTFast* -crv-libSdHTGreat crefvim.txt /*crv-libSdHTGreat* -crv-libSdHTLim crefvim.txt /*crv-libSdHTLim* -crv-libSdHTMin crefvim.txt /*crv-libSdHTMin* -crv-libSdHTPtr crefvim.txt /*crv-libSdHTPtr* -crv-libSdHType crefvim.txt /*crv-libSdHType* -crv-libSetjmpH crefvim.txt /*crv-libSetjmpH* -crv-libSignalH crefvim.txt /*crv-libSignalH* -crv-libStdargH crefvim.txt /*crv-libStdargH* -crv-libStdboolH crefvim.txt /*crv-libStdboolH* -crv-libStddefH crefvim.txt /*crv-libStddefH* -crv-libStdintH crefvim.txt /*crv-libStdintH* -crv-libStdioH crefvim.txt /*crv-libStdioH* -crv-libStdlibH crefvim.txt /*crv-libStdlibH* -crv-libStringH crefvim.txt /*crv-libStringH* -crv-libTHConv crefvim.txt /*crv-libTHConv* -crv-libTHMac crefvim.txt /*crv-libTHMac* -crv-libTHMani crefvim.txt /*crv-libTHMani* -crv-libTHType crefvim.txt /*crv-libTHType* -crv-libTgmathH crefvim.txt /*crv-libTgmathH* -crv-libTimeH crefvim.txt /*crv-libTimeH* -crv-libWCHCIO crefvim.txt /*crv-libWCHCIO* -crv-libWCHCharConv crefvim.txt /*crv-libWCHCharConv* -crv-libWCHCmp crefvim.txt /*crv-libWCHCmp* -crv-libWCHConcat crefvim.txt /*crv-libWCHConcat* -crv-libWCHCopy crefvim.txt /*crv-libWCHCopy* -crv-libWCHIO crefvim.txt /*crv-libWCHIO* -crv-libWCHMac crefvim.txt /*crv-libWCHMac* -crv-libWCHMisc crefvim.txt /*crv-libWCHMisc* -crv-libWCHNum crefvim.txt /*crv-libWCHNum* -crv-libWCHSearch crefvim.txt /*crv-libWCHSearch* -crv-libWCHStrng crefvim.txt /*crv-libWCHStrng* -crv-libWCHTimeConv crefvim.txt /*crv-libWCHTimeConv* -crv-libWCHType crefvim.txt /*crv-libWCHType* -crv-libWTHCextens crefvim.txt /*crv-libWTHCextens* -crv-libWTHClass crefvim.txt /*crv-libWTHClass* -crv-libWTHCwide crefvim.txt /*crv-libWTHCwide* -crv-libWTHMac crefvim.txt /*crv-libWTHMac* -crv-libWTHMap crefvim.txt /*crv-libWTHMap* -crv-libWTHMextens crefvim.txt /*crv-libWTHMextens* -crv-libWTHMwide crefvim.txt /*crv-libWTHMwide* -crv-libWTHType crefvim.txt /*crv-libWTHType* -crv-libWcharH crefvim.txt /*crv-libWcharH* -crv-libWctypeH crefvim.txt /*crv-libWctypeH* -crv-llabs crefvim.txt /*crv-llabs* -crv-lldif_t crefvim.txt /*crv-lldif_t* -crv-lldiv crefvim.txt /*crv-lldiv* -crv-llrint crefvim.txt /*crv-llrint* -crv-llrintf crefvim.txt /*crv-llrintf* -crv-llrintl crefvim.txt /*crv-llrintl* -crv-llround crefvim.txt /*crv-llround* -crv-llroundf crefvim.txt /*crv-llroundf* -crv-llroundl crefvim.txt /*crv-llroundl* -crv-lngAllowedChar crefvim.txt /*crv-lngAllowedChar* -crv-lngBlockComment crefvim.txt /*crv-lngBlockComment* -crv-lngChar crefvim.txt /*crv-lngChar* -crv-lngComment crefvim.txt /*crv-lngComment* -crv-lngEscSeq crefvim.txt /*crv-lngEscSeq* -crv-lngLineComment crefvim.txt /*crv-lngLineComment* -crv-localeconv crefvim.txt /*crv-localeconv* -crv-localtime crefvim.txt /*crv-localtime* -crv-log crefvim.txt /*crv-log* -crv-log10 crefvim.txt /*crv-log10* -crv-log10f crefvim.txt /*crv-log10f* -crv-log10l crefvim.txt /*crv-log10l* -crv-log1p crefvim.txt /*crv-log1p* -crv-log1pf crefvim.txt /*crv-log1pf* -crv-log1pl crefvim.txt /*crv-log1pl* -crv-log2 crefvim.txt /*crv-log2* -crv-log2f crefvim.txt /*crv-log2f* -crv-log2l crefvim.txt /*crv-log2l* -crv-logb crefvim.txt /*crv-logb* -crv-logbf crefvim.txt /*crv-logbf* -crv-logbl crefvim.txt /*crv-logbl* -crv-logf crefvim.txt /*crv-logf* -crv-logl crefvim.txt /*crv-logl* -crv-long crefvim.txt /*crv-long* -crv-longjmp crefvim.txt /*crv-longjmp* -crv-lrint crefvim.txt /*crv-lrint* -crv-lrintf crefvim.txt /*crv-lrintf* -crv-lrintl crefvim.txt /*crv-lrintl* -crv-lround crefvim.txt /*crv-lround* -crv-lroundf crefvim.txt /*crv-lroundf* -crv-lroundl crefvim.txt /*crv-lroundl* -crv-malloc crefvim.txt /*crv-malloc* -crv-mblen crefvim.txt /*crv-mblen* -crv-mbrlen crefvim.txt /*crv-mbrlen* -crv-mbrtowc crefvim.txt /*crv-mbrtowc* -crv-mbsinit crefvim.txt /*crv-mbsinit* -crv-mbsrtowc crefvim.txt /*crv-mbsrtowc* -crv-mbstate_t crefvim.txt /*crv-mbstate_t* -crv-mbstowcs crefvim.txt /*crv-mbstowcs* -crv-mbtowc crefvim.txt /*crv-mbtowc* -crv-memchr crefvim.txt /*crv-memchr* -crv-memcmp crefvim.txt /*crv-memcmp* -crv-memcpy crefvim.txt /*crv-memcpy* -crv-memmove crefvim.txt /*crv-memmove* -crv-memset crefvim.txt /*crv-memset* -crv-mktime crefvim.txt /*crv-mktime* -crv-modf crefvim.txt /*crv-modf* -crv-modff crefvim.txt /*crv-modff* -crv-modfl crefvim.txt /*crv-modfl* -crv-mon_decimal_point crefvim.txt /*crv-mon_decimal_point* -crv-mon_grouping crefvim.txt /*crv-mon_grouping* -crv-mon_thousands_sep crefvim.txt /*crv-mon_thousands_sep* -crv-n_cs_precedes crefvim.txt /*crv-n_cs_precedes* -crv-n_sep_by_space crefvim.txt /*crv-n_sep_by_space* -crv-n_sign_posn crefvim.txt /*crv-n_sign_posn* -crv-nan crefvim.txt /*crv-nan* -crv-nanf crefvim.txt /*crv-nanf* -crv-nanl crefvim.txt /*crv-nanl* -crv-nearbyint crefvim.txt /*crv-nearbyint* -crv-nearbyintf crefvim.txt /*crv-nearbyintf* -crv-nearbyintl crefvim.txt /*crv-nearbyintl* -crv-negative_sign crefvim.txt /*crv-negative_sign* -crv-nextafter crefvim.txt /*crv-nextafter* -crv-nextafterf crefvim.txt /*crv-nextafterf* -crv-nextafterl crefvim.txt /*crv-nextafterl* -crv-nexttoward crefvim.txt /*crv-nexttoward* -crv-nexttowardf crefvim.txt /*crv-nexttowardf* -crv-nexttowardl crefvim.txt /*crv-nexttowardl* -crv-offsetof crefvim.txt /*crv-offsetof* -crv-onesComplement crefvim.txt /*crv-onesComplement* -crv-opAdd crefvim.txt /*crv-opAdd* -crv-opAddress crefvim.txt /*crv-opAddress* -crv-opArithmetic crefvim.txt /*crv-opArithmetic* -crv-opArraySel crefvim.txt /*crv-opArraySel* -crv-opAsAdd crefvim.txt /*crv-opAsAdd* -crv-opAsAssign crefvim.txt /*crv-opAsAssign* -crv-opAsDiv crefvim.txt /*crv-opAsDiv* -crv-opAsLeftShift crefvim.txt /*crv-opAsLeftShift* -crv-opAsModulo crefvim.txt /*crv-opAsModulo* -crv-opAsMul crefvim.txt /*crv-opAsMul* -crv-opAsSub crefvim.txt /*crv-opAsSub* -crv-opAssigns crefvim.txt /*crv-opAssigns* -crv-opBitAnd crefvim.txt /*crv-opBitAnd* -crv-opBitCompl crefvim.txt /*crv-opBitCompl* -crv-opBitLeftShift crefvim.txt /*crv-opBitLeftShift* -crv-opBitOr crefvim.txt /*crv-opBitOr* -crv-opBitRightShift crefvim.txt /*crv-opBitRightShift* -crv-opBitXor crefvim.txt /*crv-opBitXor* -crv-opBitwise crefvim.txt /*crv-opBitwise* -crv-opConditional crefvim.txt /*crv-opConditional* -crv-opContents crefvim.txt /*crv-opContents* -crv-opDivide crefvim.txt /*crv-opDivide* -crv-opLogAnd crefvim.txt /*crv-opLogAnd* -crv-opLogNot crefvim.txt /*crv-opLogNot* -crv-opLogOr crefvim.txt /*crv-opLogOr* -crv-opLogical crefvim.txt /*crv-opLogical* -crv-opModulo crefvim.txt /*crv-opModulo* -crv-opMultiply crefvim.txt /*crv-opMultiply* -crv-opNegSign crefvim.txt /*crv-opNegSign* -crv-opOthers crefvim.txt /*crv-opOthers* -crv-opOverview crefvim.txt /*crv-opOverview* -crv-opParenth crefvim.txt /*crv-opParenth* -crv-opPosSign crefvim.txt /*crv-opPosSign* -crv-opPostDec crefvim.txt /*crv-opPostDec* -crv-opPostInc crefvim.txt /*crv-opPostInc* -crv-opPreDec crefvim.txt /*crv-opPreDec* -crv-opPrecedence crefvim.txt /*crv-opPrecedence* -crv-opRelEqual crefvim.txt /*crv-opRelEqual* -crv-opRelGT crefvim.txt /*crv-opRelGT* -crv-opRelGTE crefvim.txt /*crv-opRelGTE* -crv-opRelLT crefvim.txt /*crv-opRelLT* -crv-opRelLTE crefvim.txt /*crv-opRelLTE* -crv-opRelUnequal crefvim.txt /*crv-opRelUnequal* -crv-opRelational crefvim.txt /*crv-opRelational* -crv-opSeries crefvim.txt /*crv-opSeries* -crv-opSizeOf crefvim.txt /*crv-opSizeOf* -crv-opStructUnionSel crefvim.txt /*crv-opStructUnionSel* -crv-opSub crefvim.txt /*crv-opSub* -crv-opTypeCast crefvim.txt /*crv-opTypeCast* -crv-operators crefvim.txt /*crv-operators* -crv-p_cs_precedes crefvim.txt /*crv-p_cs_precedes* -crv-p_sep_by_space crefvim.txt /*crv-p_sep_by_space* -crv-p_sign_posn crefvim.txt /*crv-p_sign_posn* -crv-perror crefvim.txt /*crv-perror* -crv-positive_sign crefvim.txt /*crv-positive_sign* -crv-pow crefvim.txt /*crv-pow* -crv-powf crefvim.txt /*crv-powf* -crv-powl crefvim.txt /*crv-powl* -crv-preCondDefined crefvim.txt /*crv-preCondDefined* -crv-preCondElif crefvim.txt /*crv-preCondElif* -crv-preCondElse crefvim.txt /*crv-preCondElse* -crv-preCondEndif crefvim.txt /*crv-preCondEndif* -crv-preCondIf crefvim.txt /*crv-preCondIf* -crv-preCondIfdef crefvim.txt /*crv-preCondIfdef* -crv-preCondIfndef crefvim.txt /*crv-preCondIfndef* -crv-preConditional crefvim.txt /*crv-preConditional* -crv-preError crefvim.txt /*crv-preError* -crv-preLine crefvim.txt /*crv-preLine* -crv-preMac##Operator crefvim.txt /*crv-preMac##Operator* -crv-preMac#Operator crefvim.txt /*crv-preMac#Operator* -crv-preMacCancel crefvim.txt /*crv-preMacCancel* -crv-preMacDef crefvim.txt /*crv-preMacDef* -crv-preMacFunc crefvim.txt /*crv-preMacFunc* -crv-preMacObj crefvim.txt /*crv-preMacObj* -crv-preMacPredefined crefvim.txt /*crv-preMacPredefined* -crv-preMacros crefvim.txt /*crv-preMacros* -crv-preNull crefvim.txt /*crv-preNull* -crv-prePragma crefvim.txt /*crv-prePragma* -crv-preSourceInc crefvim.txt /*crv-preSourceInc* -crv-preprocessor crefvim.txt /*crv-preprocessor* -crv-printf crefvim.txt /*crv-printf* -crv-prtdiff_t crefvim.txt /*crv-prtdiff_t* -crv-punctuators crefvim.txt /*crv-punctuators* -crv-putc crefvim.txt /*crv-putc* -crv-putchar crefvim.txt /*crv-putchar* -crv-puts crefvim.txt /*crv-puts* -crv-putwc crefvim.txt /*crv-putwc* -crv-putwchar crefvim.txt /*crv-putwchar* -crv-qsort crefvim.txt /*crv-qsort* -crv-rais crefvim.txt /*crv-rais* -crv-rand crefvim.txt /*crv-rand* -crv-realloc crefvim.txt /*crv-realloc* -crv-register crefvim.txt /*crv-register* -crv-remainder crefvim.txt /*crv-remainder* -crv-remainderf crefvim.txt /*crv-remainderf* -crv-remainderl crefvim.txt /*crv-remainderl* -crv-remove crefvim.txt /*crv-remove* -crv-remquo crefvim.txt /*crv-remquo* -crv-remquof crefvim.txt /*crv-remquof* -crv-remquol crefvim.txt /*crv-remquol* -crv-rename crefvim.txt /*crv-rename* -crv-restrict crefvim.txt /*crv-restrict* -crv-return crefvim.txt /*crv-return* -crv-rewind crefvim.txt /*crv-rewind* -crv-rint crefvim.txt /*crv-rint* -crv-rintf crefvim.txt /*crv-rintf* -crv-rintl crefvim.txt /*crv-rintl* -crv-round crefvim.txt /*crv-round* -crv-roundf crefvim.txt /*crv-roundf* -crv-roundl crefvim.txt /*crv-roundl* -crv-scalbln crefvim.txt /*crv-scalbln* -crv-scalblnf crefvim.txt /*crv-scalblnf* -crv-scalblnl crefvim.txt /*crv-scalblnl* -crv-scalbn crefvim.txt /*crv-scalbn* -crv-scalbnf crefvim.txt /*crv-scalbnf* -crv-scalbnl crefvim.txt /*crv-scalbnl* -crv-scanf crefvim.txt /*crv-scanf* -crv-setbuf crefvim.txt /*crv-setbuf* -crv-setjmp crefvim.txt /*crv-setjmp* -crv-setlocale crefvim.txt /*crv-setlocale* -crv-setvbuf crefvim.txt /*crv-setvbuf* -crv-short crefvim.txt /*crv-short* -crv-sig_atomic_t crefvim.txt /*crv-sig_atomic_t* -crv-signMagnitude crefvim.txt /*crv-signMagnitude* -crv-signal crefvim.txt /*crv-signal* -crv-signbit crefvim.txt /*crv-signbit* -crv-signed crefvim.txt /*crv-signed* -crv-signgam crefvim.txt /*crv-signgam* -crv-sin crefvim.txt /*crv-sin* -crv-sinf crefvim.txt /*crv-sinf* -crv-sinh crefvim.txt /*crv-sinh* -crv-sinhf crefvim.txt /*crv-sinhf* -crv-sinhl crefvim.txt /*crv-sinhl* -crv-sinl crefvim.txt /*crv-sinl* -crv-size_t crefvim.txt /*crv-size_t* -crv-size_t2 crefvim.txt /*crv-size_t2* -crv-size_t3 crefvim.txt /*crv-size_t3* -crv-size_t4 crefvim.txt /*crv-size_t4* -crv-size_t5 crefvim.txt /*crv-size_t5* -crv-size_t6 crefvim.txt /*crv-size_t6* -crv-sizeof crefvim.txt /*crv-sizeof* -crv-snprintf crefvim.txt /*crv-snprintf* -crv-sprintf crefvim.txt /*crv-sprintf* -crv-sqrt crefvim.txt /*crv-sqrt* -crv-sqrtf crefvim.txt /*crv-sqrtf* -crv-sqrtl crefvim.txt /*crv-sqrtl* -crv-srand crefvim.txt /*crv-srand* -crv-sscanf crefvim.txt /*crv-sscanf* -crv-stBreak crefvim.txt /*crv-stBreak* -crv-stContinue crefvim.txt /*crv-stContinue* -crv-stDoWhile crefvim.txt /*crv-stDoWhile* -crv-stFor crefvim.txt /*crv-stFor* -crv-stGoto crefvim.txt /*crv-stGoto* -crv-stIfElse crefvim.txt /*crv-stIfElse* -crv-stNull crefvim.txt /*crv-stNull* -crv-stReturn crefvim.txt /*crv-stReturn* -crv-stSwitch crefvim.txt /*crv-stSwitch* -crv-stWhile crefvim.txt /*crv-stWhile* -crv-statements crefvim.txt /*crv-statements* -crv-static crefvim.txt /*crv-static* -crv-stdCLib crefvim.txt /*crv-stdCLib* -crv-stderr crefvim.txt /*crv-stderr* -crv-stdin crefvim.txt /*crv-stdin* -crv-stdout crefvim.txt /*crv-stdout* -crv-strcat crefvim.txt /*crv-strcat* -crv-strchr crefvim.txt /*crv-strchr* -crv-strcmp crefvim.txt /*crv-strcmp* -crv-strcoll crefvim.txt /*crv-strcoll* -crv-strcpy crefvim.txt /*crv-strcpy* -crv-strcspn crefvim.txt /*crv-strcspn* -crv-strerror crefvim.txt /*crv-strerror* -crv-strftime crefvim.txt /*crv-strftime* -crv-strlen crefvim.txt /*crv-strlen* -crv-strncat crefvim.txt /*crv-strncat* -crv-strncmp crefvim.txt /*crv-strncmp* -crv-strncpy crefvim.txt /*crv-strncpy* -crv-stroul crefvim.txt /*crv-stroul* -crv-strpbrk crefvim.txt /*crv-strpbrk* -crv-strrchr crefvim.txt /*crv-strrchr* -crv-strspn crefvim.txt /*crv-strspn* -crv-strstr crefvim.txt /*crv-strstr* -crv-strtod crefvim.txt /*crv-strtod* -crv-strtof crefvim.txt /*crv-strtof* -crv-strtoimax crefvim.txt /*crv-strtoimax* -crv-strtok crefvim.txt /*crv-strtok* -crv-strtol crefvim.txt /*crv-strtol* -crv-strtold crefvim.txt /*crv-strtold* -crv-strtoll crefvim.txt /*crv-strtoll* -crv-strtoull crefvim.txt /*crv-strtoull* -crv-strtoumax crefvim.txt /*crv-strtoumax* -crv-struct crefvim.txt /*crv-struct* -crv-strxfrm crefvim.txt /*crv-strxfrm* -crv-switch crefvim.txt /*crv-switch* -crv-swprintf crefvim.txt /*crv-swprintf* -crv-swscanf crefvim.txt /*crv-swscanf* -crv-system crefvim.txt /*crv-system* -crv-tan crefvim.txt /*crv-tan* -crv-tanf crefvim.txt /*crv-tanf* -crv-tanh crefvim.txt /*crv-tanh* -crv-tanhf crefvim.txt /*crv-tanhf* -crv-tanhl crefvim.txt /*crv-tanhl* -crv-tanl crefvim.txt /*crv-tanl* -crv-tgamma crefvim.txt /*crv-tgamma* -crv-tgammaf crefvim.txt /*crv-tgammaf* -crv-tgammal crefvim.txt /*crv-tgammal* -crv-thousands_sep crefvim.txt /*crv-thousands_sep* -crv-time crefvim.txt /*crv-time* -crv-time_t crefvim.txt /*crv-time_t* -crv-tm crefvim.txt /*crv-tm* -crv-tm2 crefvim.txt /*crv-tm2* -crv-tmpfile crefvim.txt /*crv-tmpfile* -crv-tmpnam crefvim.txt /*crv-tmpnam* -crv-tolower crefvim.txt /*crv-tolower* -crv-toupper crefvim.txt /*crv-toupper* -crv-towctrans crefvim.txt /*crv-towctrans* -crv-towlower crefvim.txt /*crv-towlower* -crv-towupper crefvim.txt /*crv-towupper* -crv-trigraph crefvim.txt /*crv-trigraph* -crv-true crefvim.txt /*crv-true* -crv-trunc crefvim.txt /*crv-trunc* -crv-truncf crefvim.txt /*crv-truncf* -crv-truncl crefvim.txt /*crv-truncl* -crv-twosComplement crefvim.txt /*crv-twosComplement* -crv-typedef crefvim.txt /*crv-typedef* -crv-uint16_t crefvim.txt /*crv-uint16_t* -crv-uint32_t crefvim.txt /*crv-uint32_t* -crv-uint64_t crefvim.txt /*crv-uint64_t* -crv-uint8_t crefvim.txt /*crv-uint8_t* -crv-uint_fast16_t crefvim.txt /*crv-uint_fast16_t* -crv-uint_fast32_t crefvim.txt /*crv-uint_fast32_t* -crv-uint_fast64_t crefvim.txt /*crv-uint_fast64_t* -crv-uint_fast8_t crefvim.txt /*crv-uint_fast8_t* -crv-uint_least16_t crefvim.txt /*crv-uint_least16_t* -crv-uint_least32_t crefvim.txt /*crv-uint_least32_t* -crv-uint_least64_t crefvim.txt /*crv-uint_least64_t* -crv-uint_least8_t crefvim.txt /*crv-uint_least8_t* -crv-uintmax_t crefvim.txt /*crv-uintmax_t* -crv-uintptr_t crefvim.txt /*crv-uintptr_t* -crv-ungetc crefvim.txt /*crv-ungetc* -crv-ungetwc crefvim.txt /*crv-ungetwc* -crv-union crefvim.txt /*crv-union* -crv-unsigned crefvim.txt /*crv-unsigned* -crv-va_arg crefvim.txt /*crv-va_arg* -crv-va_copy crefvim.txt /*crv-va_copy* -crv-va_end crefvim.txt /*crv-va_end* -crv-va_list crefvim.txt /*crv-va_list* -crv-va_start crefvim.txt /*crv-va_start* -crv-vfprintf crefvim.txt /*crv-vfprintf* -crv-vfscanf crefvim.txt /*crv-vfscanf* -crv-vfwprintf crefvim.txt /*crv-vfwprintf* -crv-vfwscanf crefvim.txt /*crv-vfwscanf* -crv-void crefvim.txt /*crv-void* -crv-volatile crefvim.txt /*crv-volatile* -crv-vprintf crefvim.txt /*crv-vprintf* -crv-vscanf crefvim.txt /*crv-vscanf* -crv-vsnprintf crefvim.txt /*crv-vsnprintf* -crv-vsprintf crefvim.txt /*crv-vsprintf* -crv-vsscanf crefvim.txt /*crv-vsscanf* -crv-vswprintf crefvim.txt /*crv-vswprintf* -crv-vswscanf crefvim.txt /*crv-vswscanf* -crv-vwprintf crefvim.txt /*crv-vwprintf* -crv-vwscanf crefvim.txt /*crv-vwscanf* -crv-wchar_t crefvim.txt /*crv-wchar_t* -crv-wchar_t2 crefvim.txt /*crv-wchar_t2* -crv-wchar_t3 crefvim.txt /*crv-wchar_t3* -crv-wcrtomb crefvim.txt /*crv-wcrtomb* -crv-wcscat crefvim.txt /*crv-wcscat* -crv-wcschr crefvim.txt /*crv-wcschr* -crv-wcscmp crefvim.txt /*crv-wcscmp* -crv-wcscoll crefvim.txt /*crv-wcscoll* -crv-wcscpy crefvim.txt /*crv-wcscpy* -crv-wcscspn crefvim.txt /*crv-wcscspn* -crv-wcsftime crefvim.txt /*crv-wcsftime* -crv-wcslen crefvim.txt /*crv-wcslen* -crv-wcsncat crefvim.txt /*crv-wcsncat* -crv-wcsncmp crefvim.txt /*crv-wcsncmp* -crv-wcsncpy crefvim.txt /*crv-wcsncpy* -crv-wcspbrk crefvim.txt /*crv-wcspbrk* -crv-wcsrchr crefvim.txt /*crv-wcsrchr* -crv-wcsrtombs crefvim.txt /*crv-wcsrtombs* -crv-wcsspn crefvim.txt /*crv-wcsspn* -crv-wcsstr crefvim.txt /*crv-wcsstr* -crv-wcstod crefvim.txt /*crv-wcstod* -crv-wcstof crefvim.txt /*crv-wcstof* -crv-wcstoimax crefvim.txt /*crv-wcstoimax* -crv-wcstok crefvim.txt /*crv-wcstok* -crv-wcstol crefvim.txt /*crv-wcstol* -crv-wcstold crefvim.txt /*crv-wcstold* -crv-wcstoll crefvim.txt /*crv-wcstoll* -crv-wcstombs crefvim.txt /*crv-wcstombs* -crv-wcstoul crefvim.txt /*crv-wcstoul* -crv-wcstoull crefvim.txt /*crv-wcstoull* -crv-wcstoumax crefvim.txt /*crv-wcstoumax* -crv-wcsxfrm crefvim.txt /*crv-wcsxfrm* -crv-wctob crefvim.txt /*crv-wctob* -crv-wctomb crefvim.txt /*crv-wctomb* -crv-wctrans crefvim.txt /*crv-wctrans* -crv-wctrans_t crefvim.txt /*crv-wctrans_t* -crv-wctype crefvim.txt /*crv-wctype* -crv-wctype_t crefvim.txt /*crv-wctype_t* -crv-while crefvim.txt /*crv-while* -crv-wint_t crefvim.txt /*crv-wint_t* -crv-wint_t2 crefvim.txt /*crv-wint_t2* -crv-wmemchr crefvim.txt /*crv-wmemchr* -crv-wmemcmp crefvim.txt /*crv-wmemcmp* -crv-wmemcpy crefvim.txt /*crv-wmemcpy* -crv-wmemmove crefvim.txt /*crv-wmemmove* -crv-wmemset crefvim.txt /*crv-wmemset* -crv-wprintf crefvim.txt /*crv-wprintf* -crv-wscanf crefvim.txt /*crv-wscanf* -crvdoc-author crefvimdoc.txt /*crvdoc-author* -crvdoc-copyright crefvimdoc.txt /*crvdoc-copyright* -crvdoc-credits crefvimdoc.txt /*crvdoc-credits* -crvdoc-customization crefvimdoc.txt /*crvdoc-customization* -crvdoc-history crefvimdoc.txt /*crvdoc-history* -crvdoc-install crefvimdoc.txt /*crvdoc-install* -crvdoc-intro crefvimdoc.txt /*crvdoc-intro* -crvdoc-lbCRef crefvimdoc.txt /*crvdoc-lbCRef* -crvdoc-lbScript crefvimdoc.txt /*crvdoc-lbScript* -crvdoc-licFDL crefvimdoc.txt /*crvdoc-licFDL* -crvdoc-licFreeDoc crefvimdoc.txt /*crvdoc-licFreeDoc* -crvdoc-licGPL crefvimdoc.txt /*crvdoc-licGPL* -crvdoc-licLGPL crefvimdoc.txt /*crvdoc-licLGPL* -crvdoc-limbugs crefvimdoc.txt /*crvdoc-limbugs* -crvdoc-usage crefvimdoc.txt /*crvdoc-usage* -cvscommand-changes vcscommand.txt /*cvscommand-changes* -drv-dtArrayInit crefvim.txt /*drv-dtArrayInit* -drv-dtIncompleteArrayDecl crefvim.txt /*drv-dtIncompleteArrayDecl* -fugitive fugitive.txt /*fugitive* -fugitive#statusline() fugitive.txt /*fugitive#statusline()* -fugitive-:Gblame fugitive.txt /*fugitive-:Gblame* -fugitive-:Gcd fugitive.txt /*fugitive-:Gcd* -fugitive-:Gcommit fugitive.txt /*fugitive-:Gcommit* -fugitive-:Gdiff fugitive.txt /*fugitive-:Gdiff* -fugitive-:Ge fugitive.txt /*fugitive-:Ge* -fugitive-:Gedit fugitive.txt /*fugitive-:Gedit* -fugitive-:Ggrep fugitive.txt /*fugitive-:Ggrep* -fugitive-:Git fugitive.txt /*fugitive-:Git* -fugitive-:Glcd fugitive.txt /*fugitive-:Glcd* -fugitive-:Glog fugitive.txt /*fugitive-:Glog* -fugitive-:Gmove fugitive.txt /*fugitive-:Gmove* -fugitive-:Gpedit fugitive.txt /*fugitive-:Gpedit* -fugitive-:Gread fugitive.txt /*fugitive-:Gread* -fugitive-:Gread! fugitive.txt /*fugitive-:Gread!* -fugitive-:Gremove fugitive.txt /*fugitive-:Gremove* -fugitive-:Gsplit fugitive.txt /*fugitive-:Gsplit* -fugitive-:Gstatus fugitive.txt /*fugitive-:Gstatus* -fugitive-:Gtabedit fugitive.txt /*fugitive-:Gtabedit* -fugitive-:Gvsplit fugitive.txt /*fugitive-:Gvsplit* -fugitive-:Gwrite fugitive.txt /*fugitive-:Gwrite* -fugitive- fugitive.txt /*fugitive-* -fugitive-C fugitive.txt /*fugitive-C* -fugitive-O fugitive.txt /*fugitive-O* -fugitive-P fugitive.txt /*fugitive-P* -fugitive-a fugitive.txt /*fugitive-a* -fugitive-about fugitive.txt /*fugitive-about* -fugitive-author fugitive.txt /*fugitive-author* -fugitive-commands fugitive.txt /*fugitive-commands* -fugitive-mappings fugitive.txt /*fugitive-mappings* -fugitive-o fugitive.txt /*fugitive-o* -fugitive-revision fugitive.txt /*fugitive-revision* -fugitive-statusline fugitive.txt /*fugitive-statusline* -fugitive-~ fugitive.txt /*fugitive-~* -fugitive.txt fugitive.txt /*fugitive.txt* -loaded_nerd_tree NERD_tree.txt /*loaded_nerd_tree* -omnicpp-download omnicppcomplete.txt /*omnicpp-download* -omnicpp-faq omnicppcomplete.txt /*omnicpp-faq* -omnicpp-features omnicppcomplete.txt /*omnicpp-features* -omnicpp-history omnicppcomplete.txt /*omnicpp-history* -omnicpp-installation omnicppcomplete.txt /*omnicpp-installation* -omnicpp-limitations omnicppcomplete.txt /*omnicpp-limitations* -omnicpp-may-complete omnicppcomplete.txt /*omnicpp-may-complete* -omnicpp-options omnicppcomplete.txt /*omnicpp-options* -omnicpp-overview omnicppcomplete.txt /*omnicpp-overview* -omnicpp-popup omnicppcomplete.txt /*omnicpp-popup* -omnicpp-thanks omnicppcomplete.txt /*omnicpp-thanks* -omnicppcomplete omnicppcomplete.txt /*omnicppcomplete* -omnicppcomplete.txt omnicppcomplete.txt /*omnicppcomplete.txt* -op-opAsRightShift crefvim.txt /*op-opAsRightShift* -opAsBitAnd crefvim.txt /*opAsBitAnd* -opAsBitOr crefvim.txt /*opAsBitOr* -opAsBitXor crefvim.txt /*opAsBitXor* -project project.txt /*project* -project-adding-mappings project.txt /*project-adding-mappings* -project-example project.txt /*project-example* -project-flags project.txt /*project-flags* -project-inheritance project.txt /*project-inheritance* -project-invoking project.txt /*project-invoking* -project-mappings project.txt /*project-mappings* -project-plugin project.txt /*project-plugin* -project-settings project.txt /*project-settings* -project-syntax project.txt /*project-syntax* -project-tips project.txt /*project-tips* -project.txt project.txt /*project.txt* -taglist-commands taglist.txt /*taglist-commands* -taglist-debug taglist.txt /*taglist-debug* -taglist-extend taglist.txt /*taglist-extend* -taglist-faq taglist.txt /*taglist-faq* -taglist-functions taglist.txt /*taglist-functions* -taglist-install taglist.txt /*taglist-install* -taglist-internet taglist.txt /*taglist-internet* -taglist-intro taglist.txt /*taglist-intro* -taglist-keys taglist.txt /*taglist-keys* -taglist-license taglist.txt /*taglist-license* -taglist-menu taglist.txt /*taglist-menu* -taglist-options taglist.txt /*taglist-options* -taglist-requirements taglist.txt /*taglist-requirements* -taglist-session taglist.txt /*taglist-session* -taglist-todo taglist.txt /*taglist-todo* -taglist-using taglist.txt /*taglist-using* -taglist.txt taglist.txt /*taglist.txt* -vcscommand vcscommand.txt /*vcscommand* -vcscommand-buffer-management vcscommand.txt /*vcscommand-buffer-management* -vcscommand-buffer-variables vcscommand.txt /*vcscommand-buffer-variables* -vcscommand-bugs vcscommand.txt /*vcscommand-bugs* -vcscommand-commands vcscommand.txt /*vcscommand-commands* -vcscommand-config vcscommand.txt /*vcscommand-config* -vcscommand-contents vcscommand.txt /*vcscommand-contents* -vcscommand-customize vcscommand.txt /*vcscommand-customize* -vcscommand-events vcscommand.txt /*vcscommand-events* -vcscommand-install vcscommand.txt /*vcscommand-install* -vcscommand-intro vcscommand.txt /*vcscommand-intro* -vcscommand-manual vcscommand.txt /*vcscommand-manual* -vcscommand-mappings vcscommand.txt /*vcscommand-mappings* -vcscommand-mappings-override vcscommand.txt /*vcscommand-mappings-override* -vcscommand-naming vcscommand.txt /*vcscommand-naming* -vcscommand-options vcscommand.txt /*vcscommand-options* -vcscommand-ssh vcscommand.txt /*vcscommand-ssh* -vcscommand-ssh-config vcscommand.txt /*vcscommand-ssh-config* -vcscommand-ssh-env vcscommand.txt /*vcscommand-ssh-env* -vcscommand-ssh-other vcscommand.txt /*vcscommand-ssh-other* -vcscommand-ssh-wrapper vcscommand.txt /*vcscommand-ssh-wrapper* -vcscommand-statusline vcscommand.txt /*vcscommand-statusline* -vcscommand.txt vcscommand.txt /*vcscommand.txt* diff --git a/.vimrc b/.vimrc index 6a0320b..5590905 100644 --- a/.vimrc +++ b/.vimrc @@ -369,15 +369,10 @@ nmap zo """""""""""""""""""""""""""""""""""""""""""""""""" "Omni-completion par CTRL-X_CTRL-O """"""""""""""""""""""""""""""""""""""""""""""""""" -au FileType html set omnifunc=htmlcomplete#CompleteTags -au FileType css set omnifunc=csscomplete#CompleteCSS -au FileType javascript set omnifunc=javascriptcomplete#CompleteJS -au FileType c set omnifunc=ccomplete#Complete -au FileType php set omnifunc=phpcomplete#CompletePHP -au FileType ruby set omnifunc=rubycomplete#Complete -au FileType sql set omnifunc=sqlcomplete#Complete -au FileType python set omnifunc=pythoncomplete#Complete -au FileType xml set omnifunc=xmlcomplete#CompleteTags + +filetype plugin on +set omnifunc=syntaxcomplete#Complete + " Enable omnicppcompletion set nocp @@ -450,6 +445,7 @@ Plugin 'gmarik/Vundle.vim' Plugin 'airblade/vim-gitgutter' Plugin 'tpope/vim-fugitive' Plugin 'tpope/vim-commentary' + " language pack Plugin 'sheerun/vim-polyglot' " color even for terminal without gui... @@ -483,6 +479,9 @@ Plugin 'scrooloose/nerdtree' "Plugin 'majutsushi/tagbar' "Plugin 'Yggdroot/indentLine' +" Omni completion for cpp +Plugin 'vim-scripts/OmniCppComplete' + "Syntax checking Plugin 'scrooloose/syntastic.git' "Completion (need more configuration for python, c# ...)