From 2e6c54477e29b52cbb01de14a1c393f54d7b2d04 Mon Sep 17 00:00:00 2001 From: Benjamin Franzke Date: Mon, 23 Mar 2015 15:29:59 +0100 Subject: Remove cruft stuff from vim and use git submodules for plugins --- .config/bash/environment.sh | 4 +- .config/vim/after/ftplugin/c.vim | 2 - .config/vim/after/ftplugin/cpp.vim | 2 - .config/vim/autoload/omni/common/debug.vim | 32 - .config/vim/autoload/omni/common/utils.vim | 67 -- .config/vim/autoload/omni/cpp/complete.vim | 569 ------------- .config/vim/autoload/omni/cpp/includes.vim | 126 --- .config/vim/autoload/omni/cpp/items.vim | 660 --------------- .config/vim/autoload/omni/cpp/maycomplete.vim | 82 -- .config/vim/autoload/omni/cpp/namespaces.vim | 838 ------------------- .config/vim/autoload/omni/cpp/settings.vim | 96 --- .config/vim/autoload/omni/cpp/tokenizer.vim | 93 --- .config/vim/autoload/omni/cpp/utils.vim | 587 -------------- .config/vim/bundle/nerdtree | 1 + .config/vim/bundle/vim-colorschemes | 1 + .config/vim/bundle/vim-pathogen | 1 + .config/vim/colors/desert256.vim | 338 -------- .config/vim/colors/inkpot.vim | 212 ----- .config/vim/colors/tango.vim | 81 -- .config/vim/colors/wombat.vim | 51 -- .config/vim/compiler/mlint.vim | 44 - .config/vim/doc/omnicppcomplete.txt | 1078 ------------------------- .config/vim/doc/tags | 25 - .config/vim/ftplugin/matlab.vim | 31 - .config/vim/indent/matlab.vim | 136 ---- .config/vim/plugin/SeeTab.vim | 116 --- .config/vim/plugin/imaps.vim | 822 ------------------- .config/vim/plugin/jad.vim | 66 -- .config/vim/plugin/lodgeit.vim | 134 --- .config/vim/plugin/pastie.vim | 537 ------------ .config/vim/plugin/templates.vim | 105 --- .config/vim/spell/spell.de.add | 189 +++++ .config/vim/spell/spell.de.add.spl | Bin 0 -> 3757 bytes .config/vim/spell/spell.en.add | 29 + .config/vim/spell/spell.en.add.spl | Bin 0 -> 628 bytes .config/vim/syntax/matlab.vim | 359 -------- .config/vim/templates/changelog/change.py | 3 - .config/vim/templates/changelog/rel | 2 - .config/vim/templates/html/$ | 1 - .config/vim/templates/html/dl | 6 - .config/vim/templates/html/dt | 3 - .config/vim/templates/html/em | 1 - .config/vim/templates/html/form | 6 - .config/vim/templates/html/html | 17 - .config/vim/templates/html/input | 2 - .config/vim/templates/html/li | 2 - .config/vim/templates/html/ol | 5 - .config/vim/templates/html/p | 4 - .config/vim/templates/html/script | 4 - .config/vim/templates/html/ul | 5 - .config/vim/templates/php/$ | 1 - .config/vim/templates/php/dl | 6 - .config/vim/templates/php/dt | 3 - .config/vim/templates/php/em | 1 - .config/vim/templates/php/fore | 4 - .config/vim/templates/php/form | 6 - .config/vim/templates/php/html | 17 - .config/vim/templates/php/input | 2 - .config/vim/templates/php/li | 2 - .config/vim/templates/php/ol | 5 - .config/vim/templates/php/p | 4 - .config/vim/templates/php/script | 4 - .config/vim/templates/php/ul | 5 - .config/vim/templates/php/while | 4 - .config/vim/templates/python/fori | 2 - .config/vim/templates/python/gtkt | 3 - .config/vim/templates/python/head | 4 - .config/vim/templates/tex/head | 23 - .config/vim/vimrc | 43 +- .gitmodules | 9 + 70 files changed, 265 insertions(+), 7458 deletions(-) delete mode 100644 .config/vim/after/ftplugin/c.vim delete mode 100644 .config/vim/after/ftplugin/cpp.vim delete mode 100644 .config/vim/autoload/omni/common/debug.vim delete mode 100644 .config/vim/autoload/omni/common/utils.vim delete mode 100644 .config/vim/autoload/omni/cpp/complete.vim delete mode 100644 .config/vim/autoload/omni/cpp/includes.vim delete mode 100644 .config/vim/autoload/omni/cpp/items.vim delete mode 100644 .config/vim/autoload/omni/cpp/maycomplete.vim delete mode 100644 .config/vim/autoload/omni/cpp/namespaces.vim delete mode 100644 .config/vim/autoload/omni/cpp/settings.vim delete mode 100644 .config/vim/autoload/omni/cpp/tokenizer.vim delete mode 100644 .config/vim/autoload/omni/cpp/utils.vim create mode 160000 .config/vim/bundle/nerdtree create mode 160000 .config/vim/bundle/vim-colorschemes create mode 160000 .config/vim/bundle/vim-pathogen delete mode 100644 .config/vim/colors/desert256.vim delete mode 100644 .config/vim/colors/inkpot.vim delete mode 100644 .config/vim/colors/tango.vim delete mode 100644 .config/vim/colors/wombat.vim delete mode 100644 .config/vim/compiler/mlint.vim delete mode 100644 .config/vim/doc/omnicppcomplete.txt delete mode 100644 .config/vim/doc/tags delete mode 100644 .config/vim/ftplugin/matlab.vim delete mode 100644 .config/vim/indent/matlab.vim delete mode 100644 .config/vim/plugin/SeeTab.vim delete mode 100644 .config/vim/plugin/imaps.vim delete mode 100644 .config/vim/plugin/jad.vim delete mode 100644 .config/vim/plugin/lodgeit.vim delete mode 100644 .config/vim/plugin/pastie.vim delete mode 100755 .config/vim/plugin/templates.vim create mode 100644 .config/vim/spell/spell.de.add create mode 100644 .config/vim/spell/spell.de.add.spl create mode 100644 .config/vim/spell/spell.en.add create mode 100644 .config/vim/spell/spell.en.add.spl delete mode 100644 .config/vim/syntax/matlab.vim delete mode 100755 .config/vim/templates/changelog/change.py delete mode 100755 .config/vim/templates/changelog/rel delete mode 100755 .config/vim/templates/html/$ delete mode 100755 .config/vim/templates/html/dl delete mode 100755 .config/vim/templates/html/dt delete mode 100755 .config/vim/templates/html/em delete mode 100755 .config/vim/templates/html/form delete mode 100755 .config/vim/templates/html/html delete mode 100755 .config/vim/templates/html/input delete mode 100755 .config/vim/templates/html/li delete mode 100755 .config/vim/templates/html/ol delete mode 100755 .config/vim/templates/html/p delete mode 100755 .config/vim/templates/html/script delete mode 100755 .config/vim/templates/html/ul delete mode 100755 .config/vim/templates/php/$ delete mode 100755 .config/vim/templates/php/dl delete mode 100755 .config/vim/templates/php/dt delete mode 100755 .config/vim/templates/php/em delete mode 100755 .config/vim/templates/php/fore delete mode 100755 .config/vim/templates/php/form delete mode 100755 .config/vim/templates/php/html delete mode 100755 .config/vim/templates/php/input delete mode 100755 .config/vim/templates/php/li delete mode 100755 .config/vim/templates/php/ol delete mode 100755 .config/vim/templates/php/p delete mode 100755 .config/vim/templates/php/script delete mode 100755 .config/vim/templates/php/ul delete mode 100755 .config/vim/templates/php/while delete mode 100755 .config/vim/templates/python/fori delete mode 100755 .config/vim/templates/python/gtkt delete mode 100755 .config/vim/templates/python/head delete mode 100644 .config/vim/templates/tex/head create mode 100644 .gitmodules diff --git a/.config/bash/environment.sh b/.config/bash/environment.sh index ec63059..fad4653 100644 --- a/.config/bash/environment.sh +++ b/.config/bash/environment.sh @@ -83,7 +83,7 @@ export SDL_AUDIODRIVER=pulse #export AUDIODEV=plug:upmix # set XDG corresponding variables -export XDG_DATA_HOME="${HOME}/.config" +export XDG_DATA_HOME="${HOME}/.local/share" export XDG_CONFIG_HOME="${HOME}/.config" export XDG_CACHE_HOME="${HOME}/.cache" @@ -96,7 +96,7 @@ export INPUTRC="${XDG_CONFIG_HOME}/readline/inputrc" # manually set vim's vimrc variable and then source that file on vim startup export VIMINIT='let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc" | source $MYVIMRC' -export GTK2_RC_FILES="${XDG_CONFIG_HOME}/gtk-2.0/gtkrc" +#export GTK2_RC_FILES="${XDG_CONFIG_HOME}/gtk-2.0/gtkrc" export EIXRC="${XDG_CONFIG_HOME}/eixrc/eixrc" diff --git a/.config/vim/after/ftplugin/c.vim b/.config/vim/after/ftplugin/c.vim deleted file mode 100644 index 66dfc5e..0000000 --- a/.config/vim/after/ftplugin/c.vim +++ /dev/null @@ -1,2 +0,0 @@ -" OmniCppComplete initialization -call omni#cpp#complete#Init() diff --git a/.config/vim/after/ftplugin/cpp.vim b/.config/vim/after/ftplugin/cpp.vim deleted file mode 100644 index 66dfc5e..0000000 --- a/.config/vim/after/ftplugin/cpp.vim +++ /dev/null @@ -1,2 +0,0 @@ -" OmniCppComplete initialization -call omni#cpp#complete#Init() diff --git a/.config/vim/autoload/omni/common/debug.vim b/.config/vim/autoload/omni/common/debug.vim deleted file mode 100644 index eded649..0000000 --- a/.config/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/.config/vim/autoload/omni/common/utils.vim b/.config/vim/autoload/omni/common/utils.vim deleted file mode 100644 index c880ad2..0000000 --- a/.config/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/.config/vim/autoload/omni/cpp/complete.vim b/.config/vim/autoload/omni/cpp/complete.vim deleted file mode 100644 index a7e4edc..0000000 --- a/.config/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/.config/vim/autoload/omni/cpp/includes.vim b/.config/vim/autoload/omni/cpp/includes.vim deleted file mode 100644 index 10a89bc..0000000 --- a/.config/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/.config/vim/autoload/omni/cpp/items.vim b/.config/vim/autoload/omni/cpp/items.vim deleted file mode 100644 index b943ad4..0000000 --- a/.config/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/.config/vim/autoload/omni/cpp/maycomplete.vim b/.config/vim/autoload/omni/cpp/maycomplete.vim deleted file mode 100644 index 610526b..0000000 --- a/.config/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/.config/vim/autoload/omni/cpp/namespaces.vim b/.config/vim/autoload/omni/cpp/namespaces.vim deleted file mode 100644 index 386b3f9..0000000 --- a/.config/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/.config/vim/autoload/omni/cpp/settings.vim b/.config/vim/autoload/omni/cpp/settings.vim deleted file mode 100644 index 6683d3a..0000000 --- a/.config/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/.config/vim/autoload/omni/cpp/tokenizer.vim b/.config/vim/autoload/omni/cpp/tokenizer.vim deleted file mode 100644 index 16e0be2..0000000 --- a/.config/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/.config/vim/autoload/omni/cpp/utils.vim b/.config/vim/autoload/omni/cpp/utils.vim deleted file mode 100644 index 5d74d34..0000000 --- a/.config/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/.config/vim/bundle/nerdtree b/.config/vim/bundle/nerdtree new file mode 160000 index 0000000..3b98a7f --- /dev/null +++ b/.config/vim/bundle/nerdtree @@ -0,0 +1 @@ +Subproject commit 3b98a7fcae8f9fff356907171f0406ff8cd28921 diff --git a/.config/vim/bundle/vim-colorschemes b/.config/vim/bundle/vim-colorschemes new file mode 160000 index 0000000..81c6dd7 --- /dev/null +++ b/.config/vim/bundle/vim-colorschemes @@ -0,0 +1 @@ +Subproject commit 81c6dd7ce3169e5ad9ba92422ba6e1ce5b074e36 diff --git a/.config/vim/bundle/vim-pathogen b/.config/vim/bundle/vim-pathogen new file mode 160000 index 0000000..b9fb0df --- /dev/null +++ b/.config/vim/bundle/vim-pathogen @@ -0,0 +1 @@ +Subproject commit b9fb0dfd811004010f5f6903edef42d6004ebea2 diff --git a/.config/vim/colors/desert256.vim b/.config/vim/colors/desert256.vim deleted file mode 100644 index 7a97742..0000000 --- a/.config/vim/colors/desert256.vim +++ /dev/null @@ -1,338 +0,0 @@ -" Vim color file -" Maintainer: Henry So, Jr. - -" These are the colors of the "desert" theme by Hans Fugal with a few small -" modifications (namely that I lowered the intensity of the normal white and -" made the normal and nontext backgrounds black), modified to work with 88- -" and 256-color xterms. -" -" The original "desert" theme is available as part of the vim distribution or -" at http://hans.fugal.net/vim/colors/. -" -" The real feature of this color scheme, with a wink to the "inkpot" theme, is -" the programmatic approximation of the gui colors to the palettes of 88- and -" 256- color xterms. The functions that do this (folded away, for -" readability) are calibrated to the colors used for Thomas E. Dickey's xterm -" (version 200), which is available at http://dickey.his.com/xterm/xterm.html. -" -" I struggled with trying to parse the rgb.txt file to avoid the necessity of -" converting color names to #rrggbb form, but decided it was just not worth -" the effort. Maybe someone seeing this may decide otherwise... - -set background=dark -if version > 580 - " no guarantees for version 5.8 and below, but this makes it stop - " complaining - hi clear - if exists("syntax_on") - syntax reset - endif -endif -let g:colors_name="desert256" - -if has("gui_running") || &t_Co == 88 || &t_Co == 256 - " functions {{{ - " returns an approximate grey index for the given grey level - fun grey_number(x) - if &t_Co == 88 - if a:x < 23 - return 0 - elseif a:x < 69 - return 1 - elseif a:x < 103 - return 2 - elseif a:x < 127 - return 3 - elseif a:x < 150 - return 4 - elseif a:x < 173 - return 5 - elseif a:x < 196 - return 6 - elseif a:x < 219 - return 7 - elseif a:x < 243 - return 8 - else - return 9 - endif - else - if a:x < 14 - return 0 - else - let l:n = (a:x - 8) / 10 - let l:m = (a:x - 8) % 10 - if l:m < 5 - return l:n - else - return l:n + 1 - endif - endif - endif - endfun - - " returns the actual grey level represented by the grey index - fun grey_level(n) - if &t_Co == 88 - if a:n == 0 - return 0 - elseif a:n == 1 - return 46 - elseif a:n == 2 - return 92 - elseif a:n == 3 - return 115 - elseif a:n == 4 - return 139 - elseif a:n == 5 - return 162 - elseif a:n == 6 - return 185 - elseif a:n == 7 - return 208 - elseif a:n == 8 - return 231 - else - return 255 - endif - else - if a:n == 0 - return 0 - else - return 8 + (a:n * 10) - endif - endif - endfun - - " returns the palette index for the given grey index - fun grey_color(n) - if &t_Co == 88 - if a:n == 0 - return 16 - elseif a:n == 9 - return 79 - else - return 79 + a:n - endif - else - if a:n == 0 - return 16 - elseif a:n == 25 - return 231 - else - return 231 + a:n - endif - endif - endfun - - " returns an approximate color index for the given color level - fun rgb_number(x) - if &t_Co == 88 - if a:x < 69 - return 0 - elseif a:x < 172 - return 1 - elseif a:x < 230 - return 2 - else - return 3 - endif - else - if a:x < 75 - return 0 - else - let l:n = (a:x - 55) / 40 - let l:m = (a:x - 55) % 40 - if l:m < 20 - return l:n - else - return l:n + 1 - endif - endif - endif - endfun - - " returns the actual color level for the given color index - fun rgb_level(n) - if &t_Co == 88 - if a:n == 0 - return 0 - elseif a:n == 1 - return 139 - elseif a:n == 2 - return 205 - else - return 255 - endif - else - if a:n == 0 - return 0 - else - return 55 + (a:n * 40) - endif - endif - endfun - - " returns the palette index for the given R/G/B color indices - fun rgb_color(x, y, z) - if &t_Co == 88 - return 16 + (a:x * 16) + (a:y * 4) + a:z - else - return 16 + (a:x * 36) + (a:y * 6) + a:z - endif - endfun - - " returns the palette index to approximate the given R/G/B color levels - fun color(r, g, b) - " get the closest grey - let l:gx = grey_number(a:r) - let l:gy = grey_number(a:g) - let l:gz = grey_number(a:b) - - " get the closest color - let l:x = rgb_number(a:r) - let l:y = rgb_number(a:g) - let l:z = rgb_number(a:b) - - if l:gx == l:gy && l:gy == l:gz - " there are two possibilities - let l:dgr = grey_level(l:gx) - a:r - let l:dgg = grey_level(l:gy) - a:g - let l:dgb = grey_level(l:gz) - a:b - let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb) - let l:dr = rgb_level(l:gx) - a:r - let l:dg = rgb_level(l:gy) - a:g - let l:db = rgb_level(l:gz) - a:b - let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db) - if l:dgrey < l:drgb - " use the grey - return grey_color(l:gx) - else - " use the color - return rgb_color(l:x, l:y, l:z) - endif - else - " only one possibility - return rgb_color(l:x, l:y, l:z) - endif - endfun - - " returns the palette index to approximate the 'rrggbb' hex string - fun rgb(rgb) - let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0 - let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0 - let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0 - - return color(l:r, l:g, l:b) - endfun - - " sets the highlighting for the given group - fun X(group, fg, bg, attr) - if a:fg != "" - exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . rgb(a:fg) - endif - if a:bg != "" - exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . rgb(a:bg) - endif - if a:attr != "" - exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr - endif - endfun - " }}} - - call X("Normal", "cccccc", "000000", "") - - " highlight groups - call X("Cursor", "708090", "f0e68c", "") - "CursorIM - "Directory - "DiffAdd - "DiffChange - "DiffDelete - "DiffText - "ErrorMsg - call X("VertSplit", "c2bfa5", "7f7f7f", "reverse") - call X("Folded", "ffd700", "4d4d4d", "") - call X("FoldColumn", "d2b48c", "4d4d4d", "") - call X("IncSearch", "708090", "f0e68c", "") - "LineNr - call X("ModeMsg", "daa520", "", "") - call X("MoreMsg", "2e8b57", "", "") - call X("NonText", "addbe7", "000000", "bold") - call X("Question", "00ff7f", "", "") - call X("Search", "f5deb3", "cd853f", "") - call X("SpecialKey", "9acd32", "", "") - call X("StatusLine", "c2bfa5", "000000", "reverse") - call X("StatusLineNC", "c2bfa5", "7f7f7f", "reverse") - call X("Title", "cd5c5c", "", "") - call X("Visual", "6b8e23", "f0e68c", "reverse") - "VisualNOS - call X("WarningMsg", "fa8072", "", "") - "WildMenu - "Menu - "Scrollbar - "Tooltip - - " syntax highlighting groups - call X("Comment", "87ceeb", "", "") - call X("Constant", "ffa0a0", "", "") - call X("Identifier", "98fb98", "", "none") - call X("Statement", "f0e68c", "", "bold") - call X("PreProc", "cd5c5c", "", "") - call X("Type", "bdb76b", "", "bold") - call X("Special", "ffdead", "", "") - "Underlined - call X("Ignore", "666666", "", "") - "Error - call X("Todo", "ff4500", "eeee00", "") - - " delete functions {{{ - delf X - delf rgb - delf color - delf rgb_color - delf rgb_level - delf rgb_number - delf grey_color - delf grey_level - delf grey_number - " }}} -else - " color terminal definitions - hi SpecialKey ctermfg=darkgreen - hi NonText cterm=bold ctermfg=darkblue - hi Directory ctermfg=darkcyan - hi ErrorMsg cterm=bold ctermfg=7 ctermbg=1 - hi IncSearch cterm=NONE ctermfg=yellow ctermbg=green - hi Search cterm=NONE ctermfg=grey ctermbg=blue - hi MoreMsg ctermfg=darkgreen - hi ModeMsg cterm=NONE ctermfg=brown - hi LineNr ctermfg=3 - hi Question ctermfg=green - hi StatusLine cterm=bold,reverse - hi StatusLineNC cterm=reverse - hi VertSplit cterm=reverse - hi Title ctermfg=5 - hi Visual cterm=reverse - hi VisualNOS cterm=bold,underline - hi WarningMsg ctermfg=1 - hi WildMenu ctermfg=0 ctermbg=3 - hi Folded ctermfg=darkgrey ctermbg=NONE - hi FoldColumn ctermfg=darkgrey ctermbg=NONE - hi DiffAdd ctermbg=4 - hi DiffChange ctermbg=5 - hi DiffDelete cterm=bold ctermfg=4 ctermbg=6 - hi DiffText cterm=bold ctermbg=1 - hi Comment ctermfg=darkcyan - hi Constant ctermfg=brown - hi Special ctermfg=5 - hi Identifier ctermfg=6 - hi Statement ctermfg=3 - hi PreProc ctermfg=5 - hi Type ctermfg=2 - hi Underlined cterm=underline ctermfg=5 - hi Ignore ctermfg=darkgrey - hi Error cterm=bold ctermfg=7 ctermbg=1 -endif - -" vim: set fdl=0 fdm=marker: diff --git a/.config/vim/colors/inkpot.vim b/.config/vim/colors/inkpot.vim deleted file mode 100644 index a062248..0000000 --- a/.config/vim/colors/inkpot.vim +++ /dev/null @@ -1,212 +0,0 @@ -" Vim color file -" Name: inkpot.vim -" Maintainer: Ciaran McCreesh -" This should work in the GUI, rxvt-unicode (88 colour mode) and xterm (256 -" colour mode). It won't work in 8/16 colour terminals. -" -" To use a black background, :let g:inkpot_black_background = 1 - -set background=dark -hi clear -if exists("syntax_on") - syntax reset -endif - -let colors_name = "inkpot" - -" map a urxvt cube number to an xterm-256 cube number -fun! M(a) - return strpart("0135", a:a, 1) + 0 -endfun - -" map a urxvt colour to an xterm-256 colour -fun! X(a) - if &t_Co == 88 - return a:a - else - if a:a == 8 - return 237 - elseif a:a < 16 - return a:a - elseif a:a > 79 - return 232 + (3 * (a:a - 80)) - else - let l:b = a:a - 16 - let l:x = l:b % 4 - let l:y = (l:b / 4) % 4 - let l:z = (l:b / 16) - return 16 + M(l:x) + (6 * M(l:y)) + (36 * M(l:z)) - endif - endif -endfun - -if ! exists("g:inkpot_black_background") - let g:inkpot_black_background = 0 -endif - -if has("gui_running") - if ! g:inkpot_black_background - hi Normal gui=NONE guifg=#cfbfad guibg=#1e1e27 - else - hi Normal gui=NONE guifg=#cfbfad guibg=#000000 - endif - - hi IncSearch gui=BOLD guifg=#303030 guibg=#cd8b60 - hi Search gui=NONE guifg=#303030 guibg=#cd8b60 - hi ErrorMsg gui=BOLD guifg=#ffffff guibg=#ce4e4e - hi WarningMsg gui=BOLD guifg=#ffffff guibg=#ce8e4e - hi ModeMsg gui=BOLD guifg=#7e7eae guibg=NONE - hi MoreMsg gui=BOLD guifg=#7e7eae guibg=NONE - hi Question gui=BOLD guifg=#ffcd00 guibg=NONE - - hi StatusLine gui=BOLD guifg=#b9b9b9 guibg=#3e3e5e - hi User1 gui=BOLD guifg=#00ff8b guibg=#3e3e5e - hi User2 gui=BOLD guifg=#7070a0 guibg=#3e3e5e - hi StatusLineNC gui=NONE guifg=#b9b9b9 guibg=#3e3e5e - hi VertSplit gui=NONE guifg=#b9b9b9 guibg=#3e3e5e - - hi WildMenu gui=BOLD guifg=#eeeeee guibg=#6e6eaf - - hi MBENormal guifg=#cfbfad guibg=#2e2e3f - hi MBEChanged guifg=#eeeeee guibg=#2e2e3f - hi MBEVisibleNormal guifg=#cfcfcd guibg=#4e4e8f - hi MBEVisibleChanged guifg=#eeeeee guibg=#4e4e8f - - hi DiffText gui=NONE guifg=#ffffcd guibg=#4a2a4a - hi DiffChange gui=NONE guifg=#ffffcd guibg=#306b8f - hi DiffDelete gui=NONE guifg=#ffffcd guibg=#6d3030 - hi DiffAdd gui=NONE guifg=#ffffcd guibg=#306d30 - - hi Cursor gui=NONE guifg=#404040 guibg=#8b8bff - hi lCursor gui=NONE guifg=#404040 guibg=#8fff8b - hi CursorIM gui=NONE guifg=#404040 guibg=#8b8bff - - hi Folded gui=NONE guifg=#cfcfcd guibg=#4b208f - hi FoldColumn gui=NONE guifg=#8b8bcd guibg=#2e2e2e - - hi Directory gui=NONE guifg=#00ff8b guibg=NONE - hi LineNr gui=NONE guifg=#8b8bcd guibg=#2e2e2e - hi NonText gui=BOLD guifg=#8b8bcd guibg=NONE - hi SpecialKey gui=BOLD guifg=#ab60ed guibg=NONE - hi Title gui=BOLD guifg=#af4f4b guibg=NONE - hi Visual gui=NONE guifg=#eeeeee guibg=#4e4e8f - - hi Comment gui=NONE guifg=#cd8b00 guibg=NONE - hi Constant gui=NONE guifg=#ffcd8b guibg=NONE - hi String gui=NONE guifg=#ffcd8b guibg=#404040 - hi Error gui=NONE guifg=#ffffff guibg=#6e2e2e - hi Identifier gui=NONE guifg=#ff8bff guibg=NONE - hi Ignore gui=NONE - hi Number gui=NONE guifg=#f0ad6d guibg=NONE - hi PreProc gui=NONE guifg=#409090 guibg=NONE - hi Special gui=NONE guifg=#c080d0 guibg=NONE - hi SpecialChar gui=NONE guifg=#c080d0 guibg=#404040 - hi Statement gui=NONE guifg=#808bed guibg=NONE - hi Todo gui=BOLD guifg=#303030 guibg=#d0a060 - hi Type gui=NONE guifg=#ff8bff guibg=NONE - hi Underlined gui=BOLD guifg=#df9f2d guibg=NONE - hi TaglistTagName gui=BOLD guifg=#808bed guibg=NONE - - hi perlSpecialMatch gui=NONE guifg=#c080d0 guibg=#404040 - hi perlSpecialString gui=NONE guifg=#c080d0 guibg=#404040 - - hi cSpecialCharacter gui=NONE guifg=#c080d0 guibg=#404040 - hi cFormat gui=NONE guifg=#c080d0 guibg=#404040 - - hi doxygenBrief gui=NONE guifg=#fdab60 guibg=NONE - hi doxygenParam gui=NONE guifg=#fdd090 guibg=NONE - hi doxygenPrev gui=NONE guifg=#fdd090 guibg=NONE - hi doxygenSmallSpecial gui=NONE guifg=#fdd090 guibg=NONE - hi doxygenSpecial gui=NONE guifg=#fdd090 guibg=NONE - hi doxygenComment gui=NONE guifg=#ad7b20 guibg=NONE - hi doxygenSpecial gui=NONE guifg=#fdab60 guibg=NONE - hi doxygenSpecialMultilineDesc gui=NONE guifg=#ad600b guibg=NONE - hi doxygenSpecialOnelineDesc gui=NONE guifg=#ad600b guibg=NONE - - if v:version >= 700 - hi Pmenu gui=NONE guifg=#eeeeee guibg=#4e4e8f - hi PmenuSel gui=BOLD guifg=#eeeeee guibg=#2e2e3f - hi PmenuSbar gui=BOLD guifg=#eeeeee guibg=#6e6eaf - hi PmenuThumb gui=BOLD guifg=#eeeeee guibg=#6e6eaf - - hi SpellBad gui=undercurl guisp=#cc6666 - hi SpellRare gui=undercurl guisp=#cc66cc - hi SpellLocal gui=undercurl guisp=#cccc66 - hi SpellCap gui=undercurl guisp=#66cccc - - hi MatchParen gui=NONE guifg=#404040 guibg=#8fff8b - endif -else - if ! g:inkpot_black_background - exec "hi Normal cterm=NONE ctermfg=" . X(79) . " ctermbg=" . X(80) - else - exec "hi Normal cterm=NONE ctermfg=" . X(79) . " ctermbg=" . X(16) - endif - - exec "hi IncSearch cterm=BOLD ctermfg=" . X(80) . " ctermbg=" . X(73) - exec "hi Search cterm=NONE ctermfg=" . X(80) . " ctermbg=" . X(73) - exec "hi ErrorMsg cterm=BOLD ctermfg=" . X(16) . " ctermbg=" . X(48) - exec "hi WarningMsg cterm=BOLD ctermfg=" . X(16) . " ctermbg=" . X(68) - exec "hi ModeMsg cterm=BOLD ctermfg=" . X(38) . " ctermbg=" . "NONE" - exec "hi MoreMsg cterm=BOLD ctermfg=" . X(38) . " ctermbg=" . "NONE" - exec "hi Question cterm=BOLD ctermfg=" . X(52) . " ctermbg=" . "NONE" - - exec "hi StatusLine cterm=BOLD ctermfg=" . X(85) . " ctermbg=" . X(81) - exec "hi User1 cterm=BOLD ctermfg=" . X(28) . " ctermbg=" . X(81) - exec "hi User2 cterm=BOLD ctermfg=" . X(39) . " ctermbg=" . X(81) - exec "hi StatusLineNC cterm=NONE ctermfg=" . X(84) . " ctermbg=" . X(81) - exec "hi VertSplit cterm=NONE ctermfg=" . X(84) . " ctermbg=" . X(81) - - exec "hi WildMenu cterm=BOLD ctermfg=" . X(87) . " ctermbg=" . X(38) - - exec "hi MBENormal ctermfg=" . X(85) . " ctermbg=" . X(81) - exec "hi MBEChanged ctermfg=" . X(87) . " ctermbg=" . X(81) - exec "hi MBEVisibleNormal ctermfg=" . X(85) . " ctermbg=" . X(82) - exec "hi MBEVisibleChanged ctermfg=" . X(87) . " ctermbg=" . X(82) - - exec "hi DiffText cterm=NONE ctermfg=" . X(79) . " ctermbg=" . X(34) - exec "hi DiffChange cterm=NONE ctermfg=" . X(79) . " ctermbg=" . X(17) - exec "hi DiffDelete cterm=NONE ctermfg=" . X(79) . " ctermbg=" . X(32) - exec "hi DiffAdd cterm=NONE ctermfg=" . X(79) . " ctermbg=" . X(20) - - exec "hi Folded cterm=NONE ctermfg=" . X(79) . " ctermbg=" . X(35) - exec "hi FoldColumn cterm=NONE ctermfg=" . X(39) . " ctermbg=" . X(80) - - exec "hi Directory cterm=NONE ctermfg=" . X(28) . " ctermbg=" . "NONE" - exec "hi LineNr cterm=NONE ctermfg=" . X(39) . " ctermbg=" . X(80) - exec "hi NonText cterm=BOLD ctermfg=" . X(39) . " ctermbg=" . "NONE" - exec "hi SpecialKey cterm=BOLD ctermfg=" . X(55) . " ctermbg=" . "NONE" - exec "hi Title cterm=BOLD ctermfg=" . X(48) . " ctermbg=" . "NONE" - exec "hi Visual cterm=NONE ctermfg=" . X(79) . " ctermbg=" . X(38) - - exec "hi Comment cterm=NONE ctermfg=" . X(52) . " ctermbg=" . "NONE" - exec "hi Constant cterm=NONE ctermfg=" . X(73) . " ctermbg=" . "NONE" - exec "hi String cterm=NONE ctermfg=" . X(73) . " ctermbg=" . X(81) - exec "hi Error cterm=NONE ctermfg=" . X(79) . " ctermbg=" . X(32) - exec "hi Identifier cterm=NONE ctermfg=" . X(53) . " ctermbg=" . "NONE" - exec "hi Ignore cterm=NONE" - exec "hi Number cterm=NONE ctermfg=" . X(69) . " ctermbg=" . "NONE" - exec "hi PreProc cterm=NONE ctermfg=" . X(25) . " ctermbg=" . "NONE" - exec "hi Special cterm=NONE ctermfg=" . X(55) . " ctermbg=" . "NONE" - exec "hi SpecialChar cterm=NONE ctermfg=" . X(55) . " ctermbg=" . X(81) - exec "hi Statement cterm=NONE ctermfg=" . X(27) . " ctermbg=" . "NONE" - exec "hi Todo cterm=BOLD ctermfg=" . X(16) . " ctermbg=" . X(57) - exec "hi Type cterm=NONE ctermfg=" . X(71) . " ctermbg=" . "NONE" - exec "hi Underlined cterm=BOLD ctermfg=" . X(77) . " ctermbg=" . "NONE" - exec "hi TaglistTagName cterm=BOLD ctermfg=" . X(39) . " ctermbg=" . "NONE" - - if v:version >= 700 - exec "hi Pmenu cterm=NONE ctermfg=" . X(87) . " ctermbg=" . X(82) - exec "hi PmenuSel cterm=BOLD ctermfg=" . X(87) . " ctermbg=" . X(38) - exec "hi PmenuSbar cterm=BOLD ctermfg=" . X(87) . " ctermbg=" . X(39) - exec "hi PmenuThumb cterm=BOLD ctermfg=" . X(87) . " ctermbg=" . X(39) - - exec "hi SpellBad cterm=NONE ctermbg=" . X(32) - exec "hi SpellRare cterm=NONE ctermbg=" . X(33) - exec "hi SpellLocal cterm=NONE ctermbg=" . X(36) - exec "hi SpellCap cterm=NONE ctermbg=" . X(21) - exec "hi MatchParen cterm=NONE ctermbg=" . X(14) . "ctermfg=" . X(25) - endif -endif - -" vim: set et : diff --git a/.config/vim/colors/tango.vim b/.config/vim/colors/tango.vim deleted file mode 100644 index dda743d..0000000 --- a/.config/vim/colors/tango.vim +++ /dev/null @@ -1,81 +0,0 @@ -" -" Tango Vim Color Scheme -" ======================= -" -" For best results, set up your terminal with a Tango palette. -" Instructions for GNOME Terminal: -" http://uwstopia.nl/blog/2006/07/tango-terminal -" -" author: Michele Campeotto -" -set background=dark - -hi clear -if exists("syntax_on") - syntax reset -endif - -let colors_name = "tango" - -" Default Colors -hi Normal guifg=#eeeeec guibg=#000000 -hi Normal ctermfg=grey ctermbg=black -"hi Normal ctermfg=white ctermbg=black -hi NonText guifg=#555753 guibg=#000000 gui=none -hi NonText ctermfg=darkgray -hi Cursor guibg=#d3d7cf -hi lCursor guibg=#d3d7cf - -" Search -hi Search guifg=#eeeeec guibg=#c4a000 -hi Search cterm=none ctermfg=white ctermbg=blue -hi IncSearch guibg=#eeeeec guifg=#729fcf -hi IncSearch cterm=none ctermfg=grey ctermbg=darkblue - -" Window Elements -hi StatusLine guifg=#eeeeec guibg=#4e9a06 gui=bold -hi StatusLine ctermfg=white ctermbg=darkblue cterm=bold -hi StatusLineNC guifg=#d3d7df guibg=#4e9a06 -hi StatusLineNc ctermfg=white ctermbg=darkgrey cterm=bold -hi VertSplit guifg=#eeeeec guibg=#eeeeec -hi Folded guifg=#eeeeec guibg=#75507b -hi Folded ctermfg=white ctermbg=magenta -hi Visual guifg=#d3d7cf guibg=#4e9a06 -hi Visual ctermbg=white ctermfg=darkblue cterm=reverse - -" Specials -hi Todo guifg=#8ae234 guibg=#4e9a06 gui=bold -hi Todo ctermfg=white ctermbg=green -hi Title guifg=#eeeeec gui=bold -hi Title ctermfg=white cterm=bold - -" Syntax -hi Constant guifg=#c4a000 -hi Constant ctermfg=darkyellow -hi Number guifg=#729fcf -hi Number ctermfg=darkblue -hi Statement guifg=#4e9a06 gui=bold -hi Statement ctermfg=green -hi Identifier guifg=#8ae234 -hi Identifier ctermfg=darkgreen -hi PreProc guifg=#cc0000 -hi PreProc ctermfg=darkred -hi Comment guifg=#06989a gui=italic -hi Comment ctermfg=cyan cterm=none -hi Type guifg=#d3d7cf gui=bold -hi Type ctermfg=gray cterm=bold -hi Special guifg=#75507b -hi Special ctermfg=magenta cterm=none -hi Error guifg=#eeeeec guibg=#ef2929 -hi Error ctermfg=white ctermbg=red - -" Diff -hi DiffAdd guifg=fg guibg=#3465a4 gui=none -hi DiffAdd ctermfg=gray ctermbg=blue cterm=none -hi DiffChange guifg=fg guibg=#555753 gui=none -hi DiffChange ctermfg=gray ctermbg=darkgray cterm=none -hi DiffDelete guibg=bg -hi DiffDelete ctermfg=gray ctermbg=none cterm=none -hi DiffText guifg=fg guibg=#c4a000 gui=none -hi DiffText ctermfg=grey ctermbg=darkblue cterm=none - diff --git a/.config/vim/colors/wombat.vim b/.config/vim/colors/wombat.vim deleted file mode 100644 index 9ad1e56..0000000 --- a/.config/vim/colors/wombat.vim +++ /dev/null @@ -1,51 +0,0 @@ -" Maintainer: Lars H. Nielsen (dengmao@gmail.com) -" Last Change: January 22 2007 - -set background=dark - -hi clear - -if exists("syntax_on") - syntax reset -endif - -let colors_name = "wombat" - - -" Vim >= 7.0 specific colors -if version >= 700 - hi CursorLine guibg=#2d2d2d - hi CursorColumn guibg=#2d2d2d - hi MatchParen guifg=#f6f3e8 guibg=#857b6f gui=bold - hi Pmenu guifg=#f6f3e8 guibg=#444444 - hi PmenuSel guifg=#000000 guibg=#cae682 -endif - -" General colors -hi Cursor guifg=NONE guibg=#656565 gui=none -hi Normal guifg=#f6f3e8 guibg=#242424 gui=none -hi NonText guifg=#808080 guibg=#303030 gui=none -hi LineNr guifg=#857b6f guibg=#000000 gui=none -hi StatusLine guifg=#f6f3e8 guibg=#444444 gui=italic -hi StatusLineNC guifg=#857b6f guibg=#444444 gui=none -hi VertSplit guifg=#444444 guibg=#444444 gui=none -hi Folded guibg=#384048 guifg=#a0a8b0 gui=none -hi Title guifg=#f6f3e8 guibg=NONE gui=bold -hi Visual guifg=#f6f3e8 guibg=#444444 gui=none -hi SpecialKey guifg=#808080 guibg=#343434 gui=none - -" Syntax highlighting -hi Comment guifg=#99968b gui=italic -hi Todo guifg=#8f8f8f gui=italic -hi Constant guifg=#e5786d gui=none -hi String guifg=#95e454 gui=italic -hi Identifier guifg=#cae682 gui=none -hi Function guifg=#cae682 gui=none -hi Type guifg=#cae682 gui=none -hi Statement guifg=#8ac6f2 gui=none -hi Keyword guifg=#8ac6f2 gui=none -hi PreProc guifg=#e5786d gui=none -hi Number guifg=#e5786d gui=none -hi Special guifg=#e7f6da gui=none - - diff --git a/.config/vim/compiler/mlint.vim b/.config/vim/compiler/mlint.vim deleted file mode 100644 index f9e9c6d..0000000 --- a/.config/vim/compiler/mlint.vim +++ /dev/null @@ -1,44 +0,0 @@ -" Vim compiler file -" Compiler: Matlab mlint code checker -" Maintainer: Fabrice Guy -" Latest Revision: 2008 Oct 16 -" Comment: mlint messages are either -" - L x (C y): message (where x and y are line number and -" column number) -" - L x (C y-z): message (where x is the line number, y and -" z the column numbers where the error comes from) - - -if exists("current_compiler") - finish -endif -let current_compiler = "mlint" - -if exists(":CompilerSet") != 2 " older Vim always used :setlocal - command -nargs=* CompilerSet setlocal -endif - -" mlint doesn't provide filename information except if multiple -" filenames are given -" With the following command : -" mlint -" mlint produces an output like that : -" ========== ========== -" L x (C y): ID : Message -" L x (C y): ID : Message -" .. -" .. -" ========== ========== -" L 0 (C 0): MDOTM :Filename 'filename' must end in .m or .M -" -" The filename can then be parsed -CompilerSet makeprg=mlint\ -id\ %\ %< - -CompilerSet errorformat= - \%-P==========\ %f\ ==========, - \%-G%>==========\ %s\ ==========, - \%-G%>L\ %l\ (C\ %c):\ MDOTM%m, - \L\ %l\ (C\ %c):\ %m, - \L\ %l\ (C\ %c-%*[0-9]):\ %m, - \%-Q - diff --git a/.config/vim/doc/omnicppcomplete.txt b/.config/vim/doc/omnicppcomplete.txt deleted file mode 100644 index b11e006..0000000 --- a/.config/vim/doc/omnicppcomplete.txt +++ /dev/null @@ -1,1078 +0,0 @@ -*omnicppcomplete.txt* Plugin for C/C++ omnicompletion -*omnicppcomplete* - -Author: Vissale NEANG (fromtonrouge AT gmail DOT com) -Last Change: 26 sept. 2007 - -OmniCppComplete version 0.41 - -For Vim version 7.0 and above - -============================================================================== - -1. Overview |omnicpp-overview| -2. Downloads |omnicpp-download| -3. Installation |omnicpp-installation| -4. Options |omnicpp-options| -5. Features |omnicpp-features| -6. Limitations |omnicpp-limitations| -7. FAQ & TIPS |omnicpp-faq| -8. History |omnicpp-history| -9. Thanks |omnicpp-thanks| - -============================================================================== -1. Overview~ - *omnicpp-overview* -The purpose of this script is to provide an 'omnifunc' function for C and C++ -language. In a C++ file, while in insert mode, you can use CTRL-X CTRL-O to: - - * Complete namespaces, classes, structs and unions - * Complete attribute members and return type of functions - * Complete the "this" pointer - * Complete an object after a cast (C and C++ cast) - * Complete typedefs and anonymous types - -You can set a "may complete" behaviour to start a completion automatically -after a '.', '->' or '::'. Please see |omnicpp-may-complete| for more details. - -The script needs an |Exuberant_ctags| database to work properly. - -============================================================================== -2. Downloads~ - *omnicpp-download* -You can download the latest release of the script from this url : - - http://www.vim.org/scripts/script.php?script_id=1520 - -You can download |Exuberant_ctags| from : - - http://ctags.sourceforge.net - -============================================================================== -3. Installation~ - *omnicpp-installation* -3.1. Script installation~ - -Unzip the downloaded file in your personal |vimfiles| directory (~/.vim under -unix or %HOMEPATH%\vimfiles under windows). The 'omnifunc' will be -automatically set for C and C++ files. - -You also have to enable plugins by adding these two lines in your|.vimrc|file: > - - set nocp - filetype plugin on -< -Please see |cp| and |filetype-plugin-on| sections for more details. - -3.1.1. Files~ - -After installation you should find these files : - - after\ftplugin\cpp.vim - after\ftplugin\c.vim - - autoload\omni\common\debug.vim - \utils.vim - - autoload\omni\cpp\complete.vim - \includes.vim - \items.vim - \maycomplete.vim - \namespaces.vim - \settings.vim - \tokenizer.vim - \utils.vim - - doc\omnicppcomplete.txt - -3.2. Building the Exuberant Ctags database~ - -To extract C/C++ symbols information, the script needs an |Exuberant_ctags| -database. - -You have to build your database with at least the following options: - --c++-kinds=+p : Adds prototypes in the database for C/C++ files. - --fields=+iaS : Adds inheritance (i), access (a) and function - signatures (S) information. - --extra=+q : Adds context to the tag name. Note: Without this - option, the script cannot get class members. - -Thus to build recursively a ctags database from the current directory, the -command looks like this: -> - ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . -< -You can add a map in your |.vimrc| file, eg: > - - map :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . -< -Or you can add these options in your ctags config file (~/.ctags under unix or -%HOMEPATH%\ctags.cnf under windows) and execute the command : > - - :!ctags -R . -< -If your project contains files of other languages you may add the following -options: - --languages=c++ : Builds only the tags for C++ files. - -If your project contains macros you may also use the -I option. - -Please read the ctags help or ctags man page for more details. - -3.3. Setting the 'tags' option~ - -The default value of the option 'tags' is "./tags,tags" ("./tags,./TAGS,tags,TAGS" -when |+emacs_tags| is enabled), if you build your tag database with the cmd above, -you normally don't have to change this setting (The cmd used above generates a -file with the name "tags"). In this case your current working directory must be -the directory where the tags file reside. - -Note: When |+emacs_tags| is enabled, the script may display members twice, it's - recommended to set tags to "./tags,tags' or "./TAGS,TAGS". - -If your tags file is not named "tags" you have to add it in the 'tags' -option eg: > - - set tags+=/usr/tagsdir/mytagfile -< -You can ensure that the 'tags' option is set properly by executing the following -command: > - - :tselect MyClass -< -Where MyClass is a class of your project. This command should display all -possible tags for the type MyClass. - -3.4. Simple test~ - -Now you can do a simple test. Edit a C++ file and write the simplest case : > - - MyClass myObject; - myObject. -< -You should see class members of MyClass. - -============================================================================== -4. Options~ - *omnicpp-options* - -You can change completion behaviour by setting script options in your |.vimrc| -configuration file. - -4.1. Global scope search toggle~ - *OmniCpp_GlobalScopeSearch* - -You can enable/disable the global scope search by setting the -OmniCpp_GlobalScopeSearch option. - -Possible values are : - 0 = disabled - 1 = enabled - [default=1] > - - let OmniCpp_GlobalScopeSearch = 1 -< -4.2. Namespace search method~ - *OmniCpp_NamespaceSearch* - -You can change the 'using namespace' search behaviour by setting the -OmniCpp_NamespaceSearch option. - -Possible values are : - 0 = namespaces disabled - 1 = search namespaces in the current buffer - 2 = search namespaces in the current buffer and in included files - [default=1] > - - let OmniCpp_NamespaceSearch = 1 -< -When OmniCpp_NamespaceSearch is 2, "using namespace" declarations are parsed -in the current buffer and also in included files. To find included files, the -script use the vim env 'path', so you have to set it properly. - -Note: included files are searched with lvimgrep, thus the location list of the -current window is changed. - -Note: When the 'filetype' is "c", namespace search is always disabled even if -OmniCpp_NamespaceSearch != 0 - -4.3. Class scope completion mode~ - *OmniCpp_DisplayMode* - -When you are completing a class scope (eg: MyClass::), depending on -the current scope, you may see sometimes static, public, protected or private -members and sometimes you may see all members. By default the choice is done -automatically by the script but you can override it with the -OmniCpp_DisplayMode option. - -Note: This option can be use when you have friend classes in your project (the -script does not support friend classes). - -Possible values are : - 0 = auto - 1 = always show all members - [default=0] > - - let OmniCpp_DisplayMode = 0 -< -4.4. Show scope in abbreviation~ - *OmniCpp_ShowScopeInAbbr* - -By default, in the |omnicpp-popup| menu, you will see the scope of a match in -the last column. You can remove this column and add the scope at the beginning -of match abbreviation. -eg: - -OmniCpp_ShowScopeInAbbr = 0 - +-------------------------------------+ - |method1( f + MyNamespace::MyClass| - |_member1 m + MyNamespace::MyClass| - |_member2 m # MyNamespace::MyClass| - |_member3 m - MyNamespace::MyClass| - +-------------------------------------+ - -OmniCpp_ShowScopeInAbbr = 1 - +-------------------------------------+ - |MyNamespace::MyClass::method1( f + | - |MyNamespace::MyClass::_member1 m + | - |MyNamespace::MyClass::_member2 m # | - |MyNamespace::MyClass::_member3 m - | - +-------------------------------------+ - -Possible values are : - 0 = don't show scope in abbreviation - 1 = show scope in abbreviation and remove the last column - [default=0] > - - let OmniCpp_ShowScopeInAbbr = 0 -< -4.5. Show prototype in abbreviation~ - *OmniCpp_ShowPrototypeInAbbr* - -This option allows to display the prototype of a function in the abbreviation -part of the popup menu. - -Possible values are: - 0 = don't display prototype in abbreviation - 1 = display prototype in abbreviation - [default=0] > - - let OmniCpp_ShowPrototypeInAbbr = 0 -< -4.6. Show access~ - *OmniCpp_ShowAccess* - -This option allows to show/hide the access information ('+', '#', '-') in the -popup menu. - -Possible values are: - 0 = hide access - 1 = show access - [default=1] > - - let OmniCpp_ShowAccess = 1 - -4.7. Default using namespace list~ - *OmniCpp_DefaultNamespaces* - -When |OmniCpp_NamespaceSearch| is not 0, the script will parse using namespace -declarations in the current buffer and maybe in included files. -You can specify manually a default namespace list if you want with the -OmniCpp_DefaultNamespaces option. Each item in the list is a namespace name. -eg: If you have - - let OmniCpp_DefaultNamespaces = ["std", "MyNamespace"] - - It will be the same as inserting this declarations at the top of the - current buffer : - - using namespace std; - using namespace MyNamespace; - -This option can be use if you don't want to parse using namespace declarations -in included files and want to add namespaces that are always used in your -project. - -Possible values are : - List of String - [default=[]] > - - let OmniCpp_DefaultNamespaces = [] -< -4.8. May complete behaviour~ - *omnicpp-may-complete* - -This feature allows you to run automatically a completion after a '.', '->' -or '::'. By default, the "may complete" feature is set automatically for '.' -and '->'. The reason to not set this feature for the scope operator '::' is -sometimes you don't want to complete a namespace that contains many members. - -To enable/disable the "may complete" behaviour for dot, arrow and scope -operator, you can change the option OmniCpp_MayCompleteDot, -OmniCpp_MayCompleteArrow and OmniCpp_MayCompleteScope respectively. - - *OmniCpp_MayCompleteDot* -Possible values are : - 0 = May complete disabled for dot - 1 = May complete enabled for dot - [default=1] > - - let OmniCpp_MayCompleteDot = 1 -< - *OmniCpp_MayCompleteArrow* -Possible values are : - 0 = May complete disabled for arrow - 1 = May complete enabled for arrow - [default=1] > - - let OmniCpp_MayCompleteArrow = 1 -< - *OmniCpp_MayCompleteScope* -Possible values are : - 0 = May complete disabled for scope - 1 = May complete enabled for scope - [default=0] > - - let OmniCpp_MayCompleteScope = 0 -< - -Note: You can obviously continue to use - -4.9. Select/Don't select first popup item~ - *OmniCpp_SelectFirstItem* - -Note: This option is only used when 'completeopt' does not contain "longest". - -When 'completeopt' does not contain "longest", Vim automatically select the -first entry of the popup menu. You can change this behaviour with the -OmniCpp_SelectFirstItem option. - -Possible values are: - 0 = don't select first popup item - 1 = select first popup item (inserting it to the text) - 2 = select first popup item (without inserting it to the text) - [default=0] > - - let OmniCpp_SelectFirstItem = 0 - -4.10 Use local search function for variable definitions~ - *OmniCpp_LocalSearchDecl* - -The internal search function for variable definitions of vim requires that the -enclosing braces of the function are located in the first column. You can -change this behaviour with the OmniCpp_LocalSearchDecl option. The local -version works irrespective the position of braces. - -Possible values are: - 0 = use standard vim search function - 1 = use local search function - [default=0] > - -============================================================================== -5. Features~ - *omnicpp-features* -5.1. Popup menu~ - *omnicpp-popup* -Popup menu format: - +-------------------------------------+ - |method1( f + MyNamespace::MyClass| - |_member1 m + MyNamespace::MyClass| - |_member2 m # MyNamespace::MyClass| - |_member3 m - MyNamespace::MyClass| - +-------------------------------------+ - ^ ^ ^ ^ - (1) (2)(3) (4) - -(1) name of the symbol, when a match ends with '(' it's a function. - -(2) kind of the symbol, possible kinds are : - * c = classes - * d = macro definitions - * e = enumerators (values inside an enumeration) - * f = function definitions - * g = enumeration names - * m = class, struct, and union members - * n = namespaces - * p = function prototypes - * s = structure names - * t = typedefs - * u = union names - * v = variable definitions - -(3) access, possible values are : - * + = public - * # = protected - * - = private -Note: enumerators have no access information - -(4) scope where the symbol is defined. -Note: If the scope is empty it's a global symbol -Note: anonymous scope may end with __anon[number] -eg: If you have an anonymous enum in MyNamespace::MyClass : > - - namespace MyNamespace - { - class MyClass - { - private: - - enum - { - E_ENUM0, - E_ENUM1, - E_ENUM2 - }; - }; - } -< - -You should see : - - +----------------------------------------------+ - |E_ENUM0 e MyNamespace::MyClass::__anon1| - |E_ENUM1 e MyNamespace::MyClass::__anon1| - |E_ENUM2 e MyNamespace::MyClass::__anon1| - +----------------------------------------------+ - ^ - __anon[number] - -5.2. Global scope completion~ - -The global scope completion allows you to complete global symbols for the base -you are currently typing. The base can start with '::' or not. -Note: Global scope completion only works with a non empty base, if you run a -completion just after a '::' the completion will fail. The reason is that if -there is no base to complete the script will try to display all the tags in -the database. For small project it could be not a problem but for others you -may wait 5 minutes or more for a result. - -eg1 : > - - pthread_cr => pthread_create -< -Where pthread_create is a global function. -eg2: > - ::globa => ::global_func( - +----------------+ - |global_func( f| - |global_var1 v| - |global_var2 v| - +----------------+ -< -Where global_var1, global_var2 and global_func are global symbols -eg3: > - :: => [NO MATCH] -< -No match because a global completion from an empty base is not allowed. - -5.3. Namespace scope completion~ - -You can complete namespace members after a 'MyNamespace::'. Contrary to global -scope completion you can run a completion from an empty base. -Possible members are: - * Namespaces - * Classes - * Structs - * Unions - * Enums - * Functions - * Variables - * Typedefs - -eg: > - MyNamespace:: - +--------------------------------+ - |E_ENUM0 e MyNamespace| - |E_ENUM1 e MyNamespace| - |E_ENUM2 e MyNamespace| - |MyClass c MyNamespace| - |MyEnum g MyNamespace| - |MyStruct s MyNamespace| - |MyUnion u MyNamespace| - |SubNamespace n MyNamespace| - |doSomething( f MyNamespace| - |myVar v MyNamespace| - |something_t t MyNamespace| - +--------------------------------+ - -5.4. Class scope completion~ - -You can complete class members after a 'MyClass::'. Contrary to global scope -completion you can run a completion from an empty base. -By default, there is two behaviours for class scope completion. - - a) Completion of a base class of the current class scope - - When you are completing a base class of the current class scope, you - will see all members of this class in the popup menu. - eg: > - - class A - { - public: - enum - { - E_ENUM0, - E_ENUM1, - E_ENUM2, - }; - - void func1(); - static int _staticMember; - - private: - int _member; - }; - - class B : public A - { - public: - void doSomething(); - }; - - - void MyClassB::doSomething() - { - MyClassA:: - +---------------------------+ - |E_ENUM0 e MyClassA| - |E_ENUM1 e MyClassA| - |E_ENUM2 e MyClassA| - |func1( f + MyClassA| - |_member m - MyClassA| - |_staticMember m + MyClassA| - +---------------------------+ - } -< - - b) Completion of a non base class of the current class scope - - When you are completing a class that is not a base class of the - current class you will see only enumerators and static members. - eg: > - - class C - { - public: - void doSomething(); - }; - - void MyClassC::doSomething() - { - MyClassA:: - +---------------------------+ - |E_ENUM0 e MyClassA| - |E_ENUM1 e MyClassA| - |E_ENUM2 e MyClassA| - |_staticMember m + MyClassA| - +---------------------------+ - } -< -You can override the default behaviour by setting the -|OmniCpp_DisplayMode| option. - -5.5. Current scope completion~ - -When you start a completion from an empty instruction you are in "Current -scope completion" mode. You will see possible members of each context in -the context stack. -eg: > - void MyClass::doSomething() - { - using namespace MyNamespace; - using namespace SubNamespace; - - // You will see members of each context in the context stack - // 1) MyClass members - // 2) MyNamespace::SubNamespace members - // 3) MyNamespace members - - - +------------------------------------------+ - |_member1 m + MyClass | - |_member2 m # MyClass | - |func1( f MyNamespace::SubNamespace| - |var v MyNamespace::SubNamespace| - |func1( f MyNamespace | - |var v MyNamespace | - +------------------------------------------+ - } -< - -5.6. Class, Struct and Union members completion~ - -You can complete members of class, struct and union instances after a '->' or -'.'. -eg: > - MyClass myObject; - myObject. - +-----------------------+ - |_member1 m + MyClass | - |_member2 m # MyClass | - +-----------------------+ -< - -5.7. Attribute members and returned type completion~ - -You can complete a class member or a return type of a function. -eg: > - MyClass myObject; - - // Completion of the member _member1 - myObject._member1-> - +------------------------+ - |get( m + AnotherClass1| - +------------------------+ - - // Completion of the return type of the function get() - myObject._member1->get()-> - +--------------------------+ - |_member1 m + AnotherClass2| - |_member2 m # AnotherClass2| - |_member3 m - AnotherClass2| - +--------------------------+ - -5.8. Anonymous type completion~ - -Note: To use this feature you need at least|Exuberant_ctags| version 5.6 - -You can complete an anonymous type like this : > - struct - { - int a; - int b; - int c; - }globalVar; - - void func() - { - globalVar. - +---------------+ - |a m + __anon1| - |b m + __anon1| - |c m + __anon1| - +---------------+ - } -< -Where globalVar is a global variable of an anonymous type - -5.9. Typedef completion~ - -You can complete a typedef. The typedef is resolved recursively, thus typedef -of typedef of... may not be a problem. - -You can also complete a typedef of an anonymous type, eg : > - typedef struct - { - int a; - int b; - int c; - }something_t; - - something_t globalVar; - - void func() - { - globalVar. - +---------------+ - |a m + __anon1| - |b m + __anon1| - |c m + __anon1| - +---------------+ - } -< -Where globalVar is a global variable of typedef of an anonymous type. - -5.10. Completion of the "this" pointer~ - -You can complete the "this" pointer. -eg: > - this-> - +-----------------------+ - |_member1 m + MyClass | - |_member2 m # MyClass | - +-----------------------+ - - (*this). - +-----------------------+ - |_member1 m + MyClass | - |_member2 m # MyClass | - +-----------------------+ -< - -5.11. Completion after a cast~ - -You can complete an object after a C or C++ cast. -eg: > - // C cast style - ((AnotherStruct*)pStruct)-> - - // C++ cast style - static_cast(pStruct)-> -< - -5.12. Preview window~ - -If the 'completeopt' option contains the setting "preview" (this is the -default value), you will see a preview window during the completion. -This window shows useful information like function signature, filename where -the symbol is define etc... - -The preview window contains tag information, the list below is non exhaustive. - - * name : name of the tag - * cmd : regexp or line number that helps to find the tag - * signature : signature for prototypes and functions - * kind : kind of the tag (eg: namespace, class etc...) - * access : access information (eg: public, protected, private) - * inherits : list of base classes - * filename : filename where the tag is define - -5.13. Code tokenization~ - -When you start a completion, the current instruction is tokenized ignoring -spaces, tabs, carriage returns and comments. Thus you can complete a symbol -even if the current instruction is on multiple lines, has comments between -words etc... : -eg: this case is unrealistic but it's just for illustration > - - myObject [ 0 ]/* Why is there a comment here ?*/ - ->_member - -> -< - -============================================================================== -6. Limitations~ - *omnicpp-limitations* -Some C++ features are not supported by the script, some implemented features -may not work properly in some conditions. They are multiple reasons like a -lack of information in the database, performance issues and so on... - -6.1. Attribute members and returned type completion~ - -To work properly, the completion of attribute members and returned type of -functions depends on how you write your code in the class declaration. -Because the tags database does not contain information like return type or -type of a member, the script use the cmd information of the tag to determine -the type of an attribute member or the return type of a function. - -Thus, because the cmd is a regular expression (or line number for #define) if -you write your code like this : > - - class MyClass - { - public: - - MyOtherClass - _member; - }; -< -The type of _member will not be recognized, because the cmd will be -/^ _member;$/ and does not contain the type MyOtherClass. -The correct case should be : > - - class MyClass - { - public: - - MyOtherClass _member; - }; -< -It's the same problem for return type of function : > - - class MyClass - { - public: - - MyOtherClass - getOtherClass(); - }; -< -Here the cmd will be /^ getOtherClass();$/ and the script won't find the -return type. -The correct case should be : > - class MyClass - { - public: - - MyOtherClass getOtherClass(); - }; -< - -6.2. Static members~ - -It's the same problem as above, tags database does not contain information -about static members. The only fast way to get this information is to use the -cmd. - -6.3. Typedef~ - -It's the same problem as above, tags database does not contain information -about the type of a typedef. The script use the cmd information to resolve the -typedef. - -6.4. Restricted inheritance access~ - -Tags database contains inheritance information but unfortunately inheritance -access are not available. We could use the cmd but we often find code -indentation like this : > - - class A : - public B, - protected C, - private D - { - }; -< -Here the cmd will be /^class A :$/, we can't extract inheritance access. - -6.5. Using namespace parsing~ - -When you start a completion, using namespace declarations are parsed from the -cursor position to the first scope to detect local using namespace -declarations. After that, global using namespace declarations are parsed in the -file and included files. - -There is a limitation for global using namespace detection, for performance -issues only using namespace that starts a line will be detected. - -6.6. Friend classes~ - -Tags database does not contain information about friend classes. The script -does not support friend classes. - -6.7. Templates~ - -At the moment, |Exuberant_ctags| does not provide additional information for -templates. That's why the script does not handle templates. - -============================================================================== -7. FAQ & TIPS~ - *omnicpp-faq* - -* How to complete STL objects ? - If you have some troubles to generate a good ctags database for STL you - can try this solution : - - 1) Download SGI's STL from SGI's site - (http://www.sgi.com/tech/stl/download.html) - 2) Replace all __STL_BEGIN_NAMESPACE by "namespace std {" and - __STL_END_NAMESPACE by "}" from header and source files. (with Vim, - or with tar and sed or another tool) - 3) Run ctags and put the generated tags file in a directory eg: - ~/MyTags/stl.tags - 4) set tags+=~/MyTags/stl.tags - - The main problem is that you can't tell to ctags that - __STL_BEGIN_NAMESPACE = "namespace std {" even with the option -I. - That's why you need the step 2). - - Here is another solution if you have STL sources using _GLIBCXX_STD macro - (Tip by Nicola Bonelli) : > - - let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"] -< -* How to close automatically the preview window after a completion ? - (Tip by Kamil Renczewski) - - You can add to your |vimrc| the following lines : > - - autocmd CursorMovedI * if pumvisible() == 0|pclose|endif - autocmd InsertLeave * if pumvisible() == 0|pclose|endif -< -============================================================================== -8. History~ - *omnicpp-history* -Version O.41 - - It's recommended to update ctags to version 5.7 or higher - - The plugin is now activated for C files - - New value for OmniCpp_SelectFirstItem when the option is equal to - 2 the first item is selected without inserting it to - the text (patch from Marek Olszewski) - - Bug when completing union members fixed with ctags 5.7 - (reported by Willem-Jan de Hoog) - - New option OmniCpp_LocalSearchDecl (patch from Roland Kuck) - - Bug when tags=something,,somethingelse (reported by Tobias Pflug) - - Bug with nested structure (reported by Mikhail Daen) - - Bug where the script fails to detect the type of a variable when - the ignorecase option is on (reported by Alexey Vakhov) - - Error message when trying to use completion on a not yet saved - Vim buffer (reported by Neil Bird) - - Error message when trying to use completion on an file opened from - a tselect command (reported by Henrique Andrade) - -Version 0.4 - - The script is renamed to OmniCppComplete according to the library - script directory structure. - - OmniCpp_ClassScopeCompletionMethod renamed to OmniCpp_DisplayMode - - Fixed a bug where the quickfix list is modified after a completion. - - OmniCpp_ShowPrototypeInAbbr option added. It allows to show the - function signature in the abbreviation. - - OmniCpp_ShowAccess option added. It allows to hide the access - information in the popup menu. - - The tags database format must be a ctags 5.6 database if you want to - complete anonymous types. - - Fixed current scope detection not working properly in destructors. - - Don't show protected and private members according to the current scope. - - Overloaded functions are now filtered properly. - - New cache system using less memory. - - The class scope of a method is now resolved properly with "using - namespace" declarations. - - OmniCpp_SelectFirstItem option added. It allows to not select the first - item in the popup menu when 'completeopt' does not contain "longest". - - Fixed the bug where a "random" item in the popup menu is selected - by default when 'completeopt' does not contain "longest" option. - - The script is now split in library scripts. - - Cache added for 'using namespace' search in included files - - Default value for OmniCpp_NamespaceSearch is now 1 (search only in the - current buffer). - - Namespace search automatically disabled for C files even if - OmniCpp_NamespaceSearch != 0. - - To avoid linear search in tags files, the ignorecase option is now - disabled when getting tags datas (the user setting is restored after). - - Fixed a bug where friend functions may crash the script and also crash vim. - -Version 0.32 - - Optimizations in search members methods. - - 'May complete' behaviour is now set to default for dot '.' and arrow - '->' (mappings are set in after/ftplugin/cpp.vim) - - Fixed the option CppOmni_ShowScopeInAbbr not detected after the first - completion. - - Exceptions catched from taglist() when a tag file is corrupted. - - Fixed a bug where enumerators in global scope didn't appear in the - popup menu. - -Version 0.31 - WARNING: For this release and future releases you have to build your tags - database with this cmd : - "ctags -R --c++-kinds=+p --fields=+iaS --extra=+q ." - Please read installation instructions in the documentation for details - - - May complete added, please see installation notes for details. - - Fixed a bug where the completion works while in a comment or in a string. - -Version 0.3 - WARNING: For this release and future releases you have to build your tags - database with this cmd : - "ctags -R --c++-kinds=+p --fields=+iaS --extra=+q ." - Please read installation instructions in the documentation for details - - - Documentation added. - - Fixed a bug where typedefs were not correctly resolved in namespaces - in some cases. - - Fixed a bug where the type can not be detected when we have a decl - like this: class A {}globalVar; - - Fixed a bug in type detection where searchdecl() (gd) find - incorrect declaration instruction. - - Global scope completion now only works with non-empty base. - - Using namespace list is now parsed in the current buffer and in - included files. - - Fixed a bug where the completion fails in some cases when the user - sets the ignorecase to on - - Preview window information added - - Some improvements in type detection, the type can be properly detected - with a declaration like this: - 'Class1 *class1A = NULL, **class1B = NULL, class1C[9], class1D[1] = {};' - - Fixed a bug where parent scopes were not displayed in the popup menu - in the current scope completion mode. - - Fixed a bug where an error message was displayed when the last - instruction was not finished. - - Fixed a bug where the completion fails if a punctuator or operator was - immediately after the cursor. - - The script can now detect parent contexts at the cursor position - thanks to 'using namespace' declarations. - It can also detect ambiguous namespaces. They are not included in - the context list. - - Fixed a bug where the current scope is not properly detected when - a file starts with a comment - - Fixed a bug where the type is not detected when we have myObject[0] - - Removed the system() call in SearchMembers(), no more calls to the - ctags binary. The user have to build correctly his database with the cmd: - "ctags -R --c++-kinds=+p --fields=+iaS --extra=+q ." - - File time cache removed, the user have to rebuild his data base after a - modification. - -Version 0.22 - - Completion of unnamed type (eg: You can complete g_Var defined like - this 'struct {int a; int b;}g_Var;'). It also works for a typedef of - an unnamed type (eg: 'typedef struct {int a; int b;}t_mytype; t_mytype - g_Var;'). - - Tag file's time cache added, if a tag file has changed the global - scope result cache is cleared. - - Fixed a bug where the tokenization process enter in an infinite loop - when a file starts with '/*'. - -Version 0.21 - - Improvements on the global scope completion. - The user can now see the progression of the search and complete - matches are stored in a cache for optimization. The cache is cleared - when the tag env is modified. - - Within a class scope when the user complete an empty word, the popup - menu displays the members of the class then members of the global - scope. - - Fixed a bug where a current scope completion failed after a punctuator - or operator (eg: after a '=' or '!='). - -Version 0.2 - - Improvements in type detection (eg: when a variable is declared in a - parameter list, a catch clause, etc...) - - Code tokenization => ignoring spaces, tabs, carriage returns and comments - You can complete a code even if the instruction has bad - indentation, spaces or carriage returns between words - - Completion of class members added - - Detection of the current scope at the cursor position. - If you run a completion from en empty line, members of the current - scope are displayed. It works on the global namespace and the current - class scope (but there is not the combination of the 2 for the moment) - - Basic completion on the global namespace (very slow) - - Completion of returned type added - - this pointer completion added - - Completion after a cast added (C and C++ cast) - - Fixed a bug where the matches of the complete menu are not filtered - according to what the user typed - - Change the output of the popup menu. The type of the member - (function, member, enum etc...) is now display as a single letter. - The access information is display like this : '+' for a public member - '#' for a protected member and '-' for a private member. - The last information is the class, namespace or enum where the member is define. - -Version 0.12: - - Complete check added to the search process, you can now cancel - the search during a complete search. - -Version 0.1: - - First release - -============================================================================== -9. Thanks~ - *omnicpp-thanks* - * For advices, bug report, documentation, help, ideas : - Alexey Vakhov (bug report) - Arthur Axel "fREW" Schmidt (documentation) - Dennis Lubert (bug report) - Henrique Andrade (bug report) - Kamil Renczewski (tips) - Marek Olszewski (patch) - Markus Trenkwalder (bug report) - Martin Stubenschrott (bug report) - Mikhail Daen (bug report) - Neil Bird (bug report) - Nicola Bonelli (tips) - Robert Webb (bug report) - Roland Kuck (patch) - Tobias Pflug (bug report) - Willem-Jan de Hoog (bug report) - Yegappan Lakshmanan (advices) - - - * Darren Hiebert for Exuberant Ctags - - * All Vim devs for Vim - - * Bram Moolenaar for Vim - - * You for using this script :) - -============================================================================== - - vim:tw=78:fo=tcq2:isk=!-~,^*,^\|,^\":ts=8:ft=help:norl: diff --git a/.config/vim/doc/tags b/.config/vim/doc/tags deleted file mode 100644 index 6feb038..0000000 --- a/.config/vim/doc/tags +++ /dev/null @@ -1,25 +0,0 @@ -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* -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* diff --git a/.config/vim/ftplugin/matlab.vim b/.config/vim/ftplugin/matlab.vim deleted file mode 100644 index 4ae257f..0000000 --- a/.config/vim/ftplugin/matlab.vim +++ /dev/null @@ -1,31 +0,0 @@ -" Vim filetype plugin file -" Language: matlab -" Maintainer: Fabrice Guy -" Last Changed: 2008 Oct 16 - -if exists("b:did_ftplugin") - finish -endif -let b:did_ftplugin = 1 - -let s:save_cpo = &cpo -set cpo-=C - -if exists("loaded_matchit") - let s:conditionalEnd = '\(([^()]*\)\@!\\([^()]*)\)\@!' - let b:match_words = '\\|\\|\\|\\|\\|\\|\\|\\|\\|\:' . s:conditionalEnd -endif - -setlocal suffixesadd=.m -setlocal suffixes+=.asv -" Change the :browse e filter to primarily show M-files -if has("gui_win32") && !exists("b:browsefilter") - let b:browsefilter="M-files (*.m)\t*.m\n" . - \ "All files (*.*)\t*.*\n" -endif - -let b:undo_ftplugin = "setlocal suffixesadd< suffixes< " - \ . "| unlet! b:browsefilter" - \ . "| unlet! b:match_words" - -let &cpo = s:save_cpo diff --git a/.config/vim/indent/matlab.vim b/.config/vim/indent/matlab.vim deleted file mode 100644 index 936ac7c..0000000 --- a/.config/vim/indent/matlab.vim +++ /dev/null @@ -1,136 +0,0 @@ -" Matlab indent file -" Language: Matlab -" Maintainer: Fabrice Guy -" Last Change: 2008 Oct 15 - -" Only load this indent file when no other was loaded. -if exists("b:did_indent") - finish -endif -let b:did_indent = 1 -let s:onlySubfunctionExists = 0 - -setlocal indentexpr=GetMatlabIndent() -setlocal indentkeys=!,o,O=end,=case,=else,=elseif,=otherwise,=catch - -" Only define the function once. -if exists("*GetMatlabIndent") - finish -endif - -function! s:IsMatlabContinuationLine(lnum) - let continuationLine = 0 - if a:lnum > 0 - let pnbline = getline(prevnonblank(a:lnum)) - " if we have the line continuation operator (... at the end of a line or - " ... followed by a comment) it may be a line continuation - if pnbline =~ '\.\.\.\s*$' || pnbline =~ '\.\.\.\s*%.*$' - let continuationLine = 1 - " but if the ... are part of a string or a comment, it is not a - " continuation line - let col = match(pnbline, '\.\.\.\s*$') - if col == -1 - let col = match(pnbline, '\.\.\.\s*%.*$') - endif - if has('syntax_items') - if synIDattr(synID(prevnonblank(a:lnum), col + 1, 1), "name") =~ "matlabString" || - \ synIDattr(synID(prevnonblank(a:lnum), col + 1, 1), "name") =~ "matlabComment" - let continuationLine = 0 - endif - endif - endif - endif - return continuationLine -endfunction - -function GetMatlabIndent() - " Find a non-blank line above the current line. - let plnum = prevnonblank(v:lnum - 1) - - " If the previous line is a continuation line, get the beginning of the block to - " use the indent of that line - if s:IsMatlabContinuationLine(plnum - 1) - while s:IsMatlabContinuationLine(plnum - 1) - let plnum = plnum - 1 - endwhile - endif - - " At the start of the file use zero indent. - if plnum == 0 - return 0 - endif - - let curind = indent(plnum) - if s:IsMatlabContinuationLine(v:lnum - 1) - let curind = curind + &sw - endif - " Add a 'shiftwidth' after classdef, properties, switch, methods, events, - " function, if, while, for, otherwise, case, tic, try, catch, else, elseif - if getline(plnum) =~ '^\s*\(classdef\|properties\|switch\|methods\|events\|function\|if\|while\|for\|otherwise\|case\|tic\|try\|catch\|else\|elseif\)\>' - let curind = curind + &sw - " In Matlab we have different kind of functions - " - the main function (the function with the same name than the filename) - " - the nested functions - " - the functions defined in methods (for classes) - " - subfunctions - " For the moment the main function (located line 1) doesn't produce any indentation in the - " code (default behavior in the Matlab editor) and the other kind of - " functions indent the code - if getline(plnum) =~ '^\s*\function\>' - " If it is the main function - if plnum == 1 - " look for a matching end : - " - if we find a matching end everything is fine - " - if not, then all other functions are subfunctions - normal % - if getline(line('.')) =~ '^\s*end' - let s:onlySubfunctionExists = 0 - else - let s:onlySubfunctionExists = 1 - endif - normal % - let curind = curind - &sw - else - " it is a subfunction without matching end : dedent - if s:onlySubfunctionExists - let curind = curind - &sw - endif - endif - endif - endif - - " Subtract a 'shiftwidth' on a else, elseif, end, catch, otherwise, case, - " toc - if getline(v:lnum) =~ '^\s*\(else\|elseif\|end\|catch\|otherwise\|case\|toc\)\>' - let curind = curind - &sw - endif - " No indentation in a subfunction - if getline(v:lnum) =~ '^\s*\function\>' && s:onlySubfunctionExists - let curind = curind - &sw - endif - - " First case after a switch : indent - if getline(v:lnum) =~ '^\s*case' - while plnum > 0 && (getline(plnum) =~ '^\s*%' || getline(plnum) =~ '^\s*$') - let plnum = plnum - 1 - endwhile - if getline(plnum) =~ '^\s*switch' - let curind = indent(plnum) + &sw - endif - endif - - " end in a switch / end block : dedent twice - " we use the matchit script to know if this end is the end of a switch block - if exists("b:match_words") - if getline(v:lnum) =~ '^\s*end' - normal % - if getline(line('.')) =~ "switch" - let curind = curind - &sw - endif - normal % - end - end - return curind -endfunction - -" vim:sw=2 diff --git a/.config/vim/plugin/SeeTab.vim b/.config/vim/plugin/SeeTab.vim deleted file mode 100644 index 6291f9b..0000000 --- a/.config/vim/plugin/SeeTab.vim +++ /dev/null @@ -1,116 +0,0 @@ -" SeeTab: displays a bar for each tab -" Author: Charles E. Campbell, Jr. -" Date: Aug 26, 2004 -" Version: 3 -" -" GetLatestVimScripts: :AutoInstall: 628 1 SeeTab.vim -" Usage: :SeeTab (toggles tab-bars) {{{1 -" -" Variables: -" g:SeeTabFG : nominal foreground color (default: magenta) -" g:SeeTabBG : nominal background color (default: black) - -" allow user to bypass loading, also implements only-load-once -" -" GetLatestVimScripts: 628 1 :AutoInstall: SeeTab.vim - -" --------------------------------------------------------------------- -" One Loading Only: {{{1 -if exists("g:loaded_SeeTab") - finish -endif -let g:loaded_SeeTab= "v3" - -" --------------------------------------------------------------------- -" Highlighting Overrides: {{{1 -" user may override either or both of these colors in his/her <.vimrc> -if &bg == "dark" - if !exists("g:SeeTabCtermFG") - let g:SeeTabCtermFG="magenta" - endif - if !exists("g:SeeTabCtermBG") - let g:SeeTabCtermBG="black" - endif - if !exists("g:SeeTabGuiFG") - let g:SeeTabGuiFG="magenta" - endif - if !exists("g:SeeTabGuiBG") - let g:SeeTabGuiBG="black" - endif -else - if !exists("g:SeeTabCtermFG") - let g:SeeTabCtermFG="black" - endif - if !exists("g:SeeTabCtermBG") - let g:SeeTabCtermBG="magenta" - endif - if !exists("g:SeeTabGuiFG") - let g:SeeTabGuiFG="black" - endif - if !exists("g:SeeTabGuiBG") - let g:SeeTabGuiBG="magenta" - endif -endif - -" --------------------------------------------------------------------- -" Public Interface: {{{1 -com! -nargs=0 SeeTab :call SeeTab() - -" --------------------------------------------------------------------- -" SeeTab: toggles between showing tabs and using standard listchars {{{1 -fun! s:SeeTab() -" call Dfunc("SeeTab()") - - if !exists("g:SeeTabEnabled") -" call Decho("make tab bars visible (et=".&et.")") - " ----------------------- - " Make tab bar(s) visible - " ----------------------- - let g:SeeTabEnabled= 1 - - " record original SpecialKey, change SpecialKey - let regA= @a - redir @a - silent! hi SpecialKey - redir END - let s:SeeTabSpecialKey= @a - let @a = regA - hi clear SpecialKey - - if &et - syn clear - syn match SeeTabMatch /^\s\+/ contains=SeeTabBar - let tsm1= &ts - 1 - exe 'syn match SeeTabBar / \{'.tsm1.'}/hs=s,he=s+1 contained' - hi link SeeTabBar SpecialKey -" call Decho('et: exe silent! hi SpecialKey ctermfg='.g:SeeTabCtermBG.' ctermbg='.g:SeeTabCtermFG.' guifg=.'g:SeeTabGuiBG.' guibg='.g:SeeTabGuiFG) - exe 'silent! hi SpecialKey ctermfg='.g:SeeTabCtermBG.' ctermbg='.g:SeeTabCtermFG.' guifg=.'g:SeeTabGuiBG.' guibg='.g:SeeTabGuiFG - else - let s:SeeTab_list = &list - let s:SeeTab_listchars = &listchars - - " note that list uses SpecialKey highlighting - set list - set listchars=tab:\|\ - exe 'silent! hi SpecialKey ctermfg='.g:SeeTabCtermFG.' ctermbg='.g:SeeTabCtermBG.' guifg='.g:SeeTabGuiFG.' guibg=.'g:SeeTabGuiBG - endif - - else -" call Decho("remove tab bars from display") - " ------------------------- - " restore display to normal - " ------------------------- - silent! exe "hi ".substitute(s:SeeTabSpecialKey,'xxx','','e') - if &et - syn clear SeeTabMatch SeeTabBar - unlet g:SeeTabEnabled - else - let &list = s:SeeTab_list - let &listchars = &listchars - " restore SpecialKey - unlet g:SeeTabEnabled s:SeeTab_list s:SeeTab_listchars - endif - endif -endfun -" --------------------------------------------------------------------- -" vim: ts=4 fdm=marker diff --git a/.config/vim/plugin/imaps.vim b/.config/vim/plugin/imaps.vim deleted file mode 100644 index 9738936..0000000 --- a/.config/vim/plugin/imaps.vim +++ /dev/null @@ -1,822 +0,0 @@ -" File: imaps.vim -" Authors: Srinath Avadhanula -" Benji Fisher -" -" WWW: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/vim-latex/vimfiles/plugin/imaps.vim?only_with_tag=MAIN -" -" Description: insert mode template expander with cursor placement -" while preserving filetype indentation. -" -" $Id: imaps.vim,v 1.39 2004/05/30 07:35:40 srinathava Exp $ -" -" Documentation: {{{ -" -" Motivation: -" this script provides a way to generate insert mode mappings which do not -" suffer from some of the problem of mappings and abbreviations while allowing -" cursor placement after the expansion. It can alternatively be thought of as -" a template expander. -" -" Consider an example. If you do -" -" imap lhs something -" -" then a mapping is set up. However, there will be the following problems: -" 1. the 'ttimeout' option will generally limit how easily you can type the -" lhs. if you type the left hand side too slowly, then the mapping will not -" be activated. -" 2. if you mistype one of the letters of the lhs, then the mapping is -" deactivated as soon as you backspace to correct the mistake. -" -" If, in order to take care of the above problems, you do instead -" -" iab lhs something -" -" then the timeout problem is solved and so is the problem of mistyping. -" however, abbreviations are only expanded after typing a non-word character. -" which causes problems of cursor placement after the expansion and invariably -" spurious spaces are inserted. -" -" Usage Example: -" this script attempts to solve all these problems by providing an emulation -" of imaps wchich does not suffer from its attendant problems. Because maps -" are activated without having to press additional characters, therefore -" cursor placement is possible. furthermore, file-type specific indentation is -" preserved, because the rhs is expanded as if the rhs is typed in literally -" by the user. -" -" The script already provides some default mappings. each "mapping" is of the -" form: -" -" call IMAP (lhs, rhs, ft) -" -" Some characters in the RHS have special meaning which help in cursor -" placement. -" -" Example One: -" -" call IMAP ("bit`", "\\begin{itemize}\\\item <++>\\\end{itemize}<++>", "tex") -" -" This effectively sets up the map for "bit`" whenever you edit a latex file. -" When you type in this sequence of letters, the following text is inserted: -" -" \begin{itemize} -" \item * -" \end{itemize}<++> -" -" where * shows the cursor position. The cursor position after inserting the -" text is decided by the position of the first "place-holder". Place holders -" are special characters which decide cursor placement and movement. In the -" example above, the place holder characters are <+ and +>. After you have typed -" in the item, press and you will be taken to the next set of <++>'s. -" Therefore by placing the <++> characters appropriately, you can minimize the -" use of movement keys. -" -" NOTE: Set g:Imap_UsePlaceHolders to 0 to disable placeholders altogether. -" Set -" g:Imap_PlaceHolderStart and g:Imap_PlaceHolderEnd -" to something else if you want different place holder characters. -" Also, b:Imap_PlaceHolderStart and b:Imap_PlaceHolderEnd override the values -" of g:Imap_PlaceHolderStart and g:Imap_PlaceHolderEnd respectively. This is -" useful for setting buffer specific place hoders. -" -" Example Two: -" You can use the command to insert dynamic elements such as dates. -" call IMAP ('date`', "\=strftime('%b %d %Y')\", '') -" -" sets up the map for date` to insert the current date. -" -"--------------------------------------%<-------------------------------------- -" Bonus: This script also provides a command Snip which puts tearoff strings, -" '----%<----' above and below the visually selected range of lines. The -" length of the string is chosen to be equal to the longest line in the range. -" Recommended Usage: -" '<,'>Snip -"--------------------------------------%<-------------------------------------- -" }}} - -" ============================================================================== -" Script Options / Variables -" ============================================================================== -" Options {{{ -if !exists('g:Imap_StickyPlaceHolders') - let g:Imap_StickyPlaceHolders = 1 -endif -if !exists('g:Imap_DeleteEmptyPlaceHolders') - let g:Imap_DeleteEmptyPlaceHolders = 1 -endif -" }}} -" Variables {{{ -" s:LHS_{ft}_{char} will be generated automatically. It will look like -" s:LHS_tex_o = 'fo\|foo\|boo' and contain all mapped sequences ending in "o". -" s:Map_{ft}_{lhs} will be generated automatically. It will look like -" s:Map_c_foo = 'for(<++>; <++>; <++>)', the mapping for "foo". -" -" }}} - -" ============================================================================== -" functions for easy insert mode mappings. -" ============================================================================== -" IMAP: Adds a "fake" insert mode mapping. {{{ -" For example, doing -" IMAP('abc', 'def' ft) -" will mean that if the letters abc are pressed in insert mode, then -" they will be replaced by def. If ft != '', then the "mapping" will be -" specific to the files of type ft. -" -" Using IMAP has a few advantages over simply doing: -" imap abc def -" 1. with imap, if you begin typing abc, the cursor will not advance and -" long as there is a possible completion, the letters a, b, c will be -" displayed on on top of the other. using this function avoids that. -" 2. with imap, if a backspace or arrow key is pressed before completing -" the word, then the mapping is lost. this function allows movement. -" (this ofcourse means that this function is only limited to -" left-hand-sides which do not have movement keys or unprintable -" characters) -" It works by only mapping the last character of the left-hand side. -" when this character is typed in, then a reverse lookup is done and if -" the previous characters consititute the left hand side of the mapping, -" the previously typed characters and erased and the right hand side is -" inserted - -" IMAP: set up a filetype specific mapping. -" Description: -" "maps" the lhs to rhs in files of type 'ft'. If supplied with 2 -" additional arguments, then those are assumed to be the placeholder -" characters in rhs. If unspecified, then the placeholder characters -" are assumed to be '<+' and '+>' These placeholder characters in -" a:rhs are replaced with the users setting of -" [bg]:Imap_PlaceHolderStart and [bg]:Imap_PlaceHolderEnd settings. -" -function! IMAP(lhs, rhs, ft, ...) - - " Find the place holders to save for IMAP_PutTextWithMovement() . - if a:0 < 2 - let phs = '<+' - let phe = '+>' - else - let phs = a:1 - let phe = a:2 - endif - - let hash = s:Hash(a:lhs) - let s:Map_{a:ft}_{hash} = a:rhs - let s:phs_{a:ft}_{hash} = phs - let s:phe_{a:ft}_{hash} = phe - - " Add a:lhs to the list of left-hand sides that end with lastLHSChar: - let lastLHSChar = a:lhs[strlen(a:lhs)-1] - let hash = s:Hash(lastLHSChar) - if !exists("s:LHS_" . a:ft . "_" . hash) - let s:LHS_{a:ft}_{hash} = escape(a:lhs, '\') - else - let s:LHS_{a:ft}_{hash} = escape(a:lhs, '\') .'\|'. s:LHS_{a:ft}_{hash} - endif - - " map only the last character of the left-hand side. - if lastLHSChar == ' ' - let lastLHSChar = '' - end - exe 'inoremap ' - \ escape(lastLHSChar, '|') - \ '=LookupCharacter("' . - \ escape(lastLHSChar, '\|"') . - \ '")' -endfunction - -" }}} -" IMAP_list: list the rhs and place holders corresponding to a:lhs {{{ -" -" Added mainly for debugging purposes, but maybe worth keeping. -function! IMAP_list(lhs) - let char = a:lhs[strlen(a:lhs)-1] - let charHash = s:Hash(char) - if exists("s:LHS_" . &ft ."_". charHash) && a:lhs =~ s:LHS_{&ft}_{charHash} - let ft = &ft - elseif exists("s:LHS__" . charHash) && a:lhs =~ s:LHS__{charHash} - let ft = "" - else - return "" - endif - let hash = s:Hash(a:lhs) - return "rhs = " . s:Map_{ft}_{hash} . " place holders = " . - \ s:phs_{ft}_{hash} . " and " . s:phe_{ft}_{hash} -endfunction -" }}} -" LookupCharacter: inserts mapping corresponding to this character {{{ -" -" This function extracts from s:LHS_{&ft}_{a:char} or s:LHS__{a:char} -" the longest lhs matching the current text. Then it replaces lhs with the -" corresponding rhs saved in s:Map_{ft}_{lhs} . -" The place-holder variables are passed to IMAP_PutTextWithMovement() . -function! s:LookupCharacter(char) - if IMAP_GetVal('Imap_FreezeImap', 0) == 1 - return a:char - endif - let charHash = s:Hash(a:char) - - " The line so far, including the character that triggered this function: - let text = strpart(getline("."), 0, col(".")-1) . a:char - " Prefer a local map to a global one, even if the local map is shorter. - " Is this what we want? Do we care? - " Use '\V' (very no-magic) so that only '\' is special, and it was already - " escaped when building up s:LHS_{&ft}_{charHash} . - if exists("s:LHS_" . &ft . "_" . charHash) - \ && text =~ "\\C\\V\\(" . s:LHS_{&ft}_{charHash} . "\\)\\$" - let ft = &ft - elseif exists("s:LHS__" . charHash) - \ && text =~ "\\C\\V\\(" . s:LHS__{charHash} . "\\)\\$" - let ft = "" - else - " If this is a character which could have been used to trigger an - " abbreviation, check if an abbreviation exists. - if a:char !~ '\k' - let lastword = matchstr(getline('.'), '\k\+$', '') - if lastword != '' - " An extremeley wierd way to get around the fact that vim - " doesn't have the equivalent of the :mapcheck() function for - " abbreviations. - let _a = @a - exec "redir @a | silent! iab ".lastword." | redir END" - let abbreviationRHS = matchstr(@a."\n", "\n".'i\s\+'.lastword.'\+\s\+@\?\zs.*\ze'."\n") - - if @a =~ "No abbreviation found" || abbreviationRHS == "" - let @a = _a - return a:char - endif - - let @a = _a - let abbreviationRHS = escape(abbreviationRHS, '\<"') - exec 'let abbreviationRHS = "'.abbreviationRHS.'"' - - let lhs = lastword.a:char - let rhs = abbreviationRHS.a:char - let phs = IMAP_GetPlaceHolderStart() - let phe = IMAP_GetPlaceHolderEnd() - else - return a:char - endif - else - return a:char - endif - endif - " Find the longest left-hand side that matches the line so far. - " matchstr() returns the match that starts first. This automatically - " ensures that the longest LHS is used for the mapping. - if !exists('lhs') || !exists('rhs') - let lhs = matchstr(text, "\\C\\V\\(" . s:LHS_{ft}_{charHash} . "\\)\\$") - let hash = s:Hash(lhs) - let rhs = s:Map_{ft}_{hash} - let phs = s:phs_{ft}_{hash} - let phe = s:phe_{ft}_{hash} - endif - - if strlen(lhs) == 0 - return a:char - endif - " enough back-spaces to erase the left-hand side; -1 for the last - " character typed: - let bs = substitute(strpart(lhs, 1), ".", "\", "g") - return bs . IMAP_PutTextWithMovement(rhs, phs, phe) -endfunction - -" }}} -" IMAP_PutTextWithMovement: returns the string with movement appended {{{ -" Description: -" If a:str contains "placeholders", then appends movement commands to -" str in a way that the user moves to the first placeholder and enters -" insert or select mode. If supplied with 2 additional arguments, then -" they are assumed to be the placeholder specs. Otherwise, they are -" assumed to be '<+' and '+>'. These placeholder chars are replaced -" with the users settings of [bg]:Imap_PlaceHolderStart and -" [bg]:Imap_PlaceHolderEnd. -function! IMAP_PutTextWithMovement(str, ...) - - " The placeholders used in the particular input string. These can be - " different from what the user wants to use. - if a:0 < 2 - let phs = '<+' - let phe = '+>' - else - let phs = escape(a:1, '\') - let phe = escape(a:2, '\') - endif - - let text = a:str - - " The user's placeholder settings. - let phsUser = IMAP_GetPlaceHolderStart() - let pheUser = IMAP_GetPlaceHolderEnd() - - " Problem: depending on the setting of the 'encoding' option, a character - " such as "\xab" may not match itself. We try to get around this by - " changing the encoding of all our strings. At the end, we have to - " convert text back. - let phsEnc = s:Iconv(phs, "encode") - let pheEnc = s:Iconv(phe, "encode") - let phsUserEnc = s:Iconv(phsUser, "encode") - let pheUserEnc = s:Iconv(pheUser, "encode") - let textEnc = s:Iconv(text, "encode") - if textEnc != text - let textEncoded = 1 - else - let textEncoded = 0 - endif - - let pattern = '\V\(\.\{-}\)' .phs. '\(\.\{-}\)' .phe. '\(\.\*\)' - " If there are no placeholders, just return the text. - if textEnc !~ pattern - call IMAP_Debug('Not getting '.phs.' and '.phe.' in '.textEnc, 'imap') - return text - endif - " Break text up into "initial <+template+> final"; any piece may be empty. - let initialEnc = substitute(textEnc, pattern, '\1', '') - let templateEnc = substitute(textEnc, pattern, '\2', '') - let finalEnc = substitute(textEnc, pattern, '\3', '') - - " If the user does not want to use placeholders, then remove all but the - " first placeholder. - " Otherwise, replace all occurences of the placeholders here with the - " user's choice of placeholder settings. - if exists('g:Imap_UsePlaceHolders') && !g:Imap_UsePlaceHolders - let finalEnc = substitute(finalEnc, '\V'.phs.'\.\{-}'.phe, '', 'g') - else - let finalEnc = substitute(finalEnc, '\V'.phs.'\(\.\{-}\)'.phe, - \ phsUserEnc.'\1'.pheUserEnc, 'g') - endif - - " The substitutions are done, so convert back, if necessary. - if textEncoded - let initial = s:Iconv(initialEnc, "decode") - let template = s:Iconv(templateEnc, "decode") - let final = s:Iconv(finalEnc, "decode") - else - let initial = initialEnc - let template = templateEnc - let final = finalEnc - endif - - " Build up the text to insert: - " 1. the initial text plus an extra character; - " 2. go to Normal mode with , so it works even if 'insertmode' - " is set, and mark the position; - " 3. replace the extra character with tamplate and final; - " 4. back to Normal mode and restore the cursor position; - " 5. call IMAP_Jumpfunc(). - let template = phsUser . template . pheUser - " Old trick: insert and delete a character to get the same behavior at - " start, middle, or end of line and on empty lines. - let text = initial . "X\\:call IMAP_Mark('set')\\"_s" - let text = text . template . final - let text = text . "\\:call IMAP_Mark('go')\" - let text = text . "i\=IMAP_Jumpfunc('', 1)\" - - call IMAP_Debug('IMAP_PutTextWithMovement: text = ['.text.']', 'imap') - return text -endfunction - -" }}} -" IMAP_Jumpfunc: takes user to next <+place-holder+> {{{ -" Author: Luc Hermitte -" Arguments: -" direction: flag for the search() function. If set to '', search forwards, -" if 'b', then search backwards. See the {flags} argument of the -" |search()| function for valid values. -" inclusive: In vim, the search() function is 'exclusive', i.e we always goto -" next cursor match even if there is a match starting from the -" current cursor position. Setting this argument to 1 makes -" IMAP_Jumpfunc() also respect a match at the current cursor -" position. 'inclusive'ness is necessary for IMAP() because a -" placeholder string can occur at the very beginning of a map which -" we want to select. -" We use a non-zero value only in special conditions. Most mappings -" should use a zero value. -function! IMAP_Jumpfunc(direction, inclusive) - - " The user's placeholder settings. - let phsUser = IMAP_GetPlaceHolderStart() - let pheUser = IMAP_GetPlaceHolderEnd() - - let searchString = '' - " If this is not an inclusive search or if it is inclusive, but the - " current cursor position does not contain a placeholder character, then - " search for the placeholder characters. - if !a:inclusive || strpart(getline('.'), col('.')-1) !~ '\V\^'.phsUser - let searchString = '\V'.phsUser.'\_.\{-}'.pheUser - endif - - " If we didn't find any placeholders return quietly. - if searchString != '' && !search(searchString, a:direction) - return '' - endif - - " Open any closed folds and make this part of the text visible. - silent! foldopen! - - " Calculate if we have an empty placeholder or if it contains some - " description. - let template = - \ matchstr(strpart(getline('.'), col('.')-1), - \ '\V\^'.phsUser.'\zs\.\{-}\ze\('.pheUser.'\|\$\)') - let placeHolderEmpty = !strlen(template) - - " If we are selecting in exclusive mode, then we need to move one step to - " the right - let extramove = '' - if &selection == 'exclusive' - let extramove = 'l' - endif - - " Select till the end placeholder character. - let movement = "\v/\\V".pheUser."/e\".extramove - - " First remember what the search pattern was. s:RemoveLastHistoryItem will - " reset @/ to this pattern so we do not create new highlighting. - let g:Tex_LastSearchPattern = @/ - - " Now either goto insert mode or select mode. - if placeHolderEmpty && g:Imap_DeleteEmptyPlaceHolders - " delete the empty placeholder into the blackhole. - return movement."\"_c\:".s:RemoveLastHistoryItem."\" - else - return movement."\\:".s:RemoveLastHistoryItem."\gv\" - endif - -endfunction - -" }}} -" Maps for IMAP_Jumpfunc {{{ -" -" These mappings use and thus provide for easy user customization. When -" the user wants to map some other key to jump forward, he can do for -" instance: -" nmap ,f IMAP_JumpForward -" etc. - -" jumping forward and back in insert mode. -imap IMAP_JumpForward =IMAP_Jumpfunc('', 0) -imap IMAP_JumpBack =IMAP_Jumpfunc('b', 0) - -" jumping in normal mode -nmap IMAP_JumpForward i=IMAP_Jumpfunc('', 0) -nmap IMAP_JumpBack i=IMAP_Jumpfunc('b', 0) - -" deleting the present selection and then jumping forward. -vmap IMAP_DeleteAndJumpForward "_i=IMAP_Jumpfunc('', 0) -vmap IMAP_DeleteAndJumpBack "_i=IMAP_Jumpfunc('b', 0) - -" jumping forward without deleting present selection. -vmap IMAP_JumpForward i=IMAP_Jumpfunc('', 0) -vmap IMAP_JumpBack `=IMAP_Jumpfunc('b', 0) - -" }}} -" Default maps for IMAP_Jumpfunc {{{ -" map only if there is no mapping already. allows for user customization. -" NOTE: Default mappings for jumping to the previous placeholder are not -" provided. It is assumed that if the user will create such mappings -" hself if e so desires. -if !hasmapto('IMAP_JumpForward', 'i') - imap IMAP_JumpForward -endif -if !hasmapto('IMAP_JumpForward', 'n') - nmap IMAP_JumpForward -endif -if exists('g:Imap_StickyPlaceHolders') && g:Imap_StickyPlaceHolders - if !hasmapto('IMAP_JumpForward', 'v') - vmap IMAP_JumpForward - endif -else - if !hasmapto('IMAP_DeleteAndJumpForward', 'v') - vmap IMAP_DeleteAndJumpForward - endif -endif -" }}} - -nmap -<++> diff --git a/.config/vim/templates/html/ul b/.config/vim/templates/html/ul deleted file mode 100755 index f65ab78..0000000 --- a/.config/vim/templates/html/ul +++ /dev/null @@ -1,5 +0,0 @@ -
    -
  • <++>
  • - <++> -
-<++> diff --git a/.config/vim/templates/php/$ b/.config/vim/templates/php/$ deleted file mode 100755 index 86f8609..0000000 --- a/.config/vim/templates/php/$ +++ /dev/null @@ -1 +0,0 @@ -document.getElementById("<++>").<++> diff --git a/.config/vim/templates/php/dl b/.config/vim/templates/php/dl deleted file mode 100755 index c7bff2e..0000000 --- a/.config/vim/templates/php/dl +++ /dev/null @@ -1,6 +0,0 @@ -
-
<++>
-
<++>
- <++> -
-<++> diff --git a/.config/vim/templates/php/dt b/.config/vim/templates/php/dt deleted file mode 100755 index eee603e..0000000 --- a/.config/vim/templates/php/dt +++ /dev/null @@ -1,3 +0,0 @@ -
<++>
-
<++>
-<++> diff --git a/.config/vim/templates/php/em b/.config/vim/templates/php/em deleted file mode 100755 index 53f4852..0000000 --- a/.config/vim/templates/php/em +++ /dev/null @@ -1 +0,0 @@ -<++><++> diff --git a/.config/vim/templates/php/fore b/.config/vim/templates/php/fore deleted file mode 100755 index 5816e79..0000000 --- a/.config/vim/templates/php/fore +++ /dev/null @@ -1,4 +0,0 @@ -foreach(<++> as <++> => <++>) -{ - <++> -} diff --git a/.config/vim/templates/php/form b/.config/vim/templates/php/form deleted file mode 100755 index 5985979..0000000 --- a/.config/vim/templates/php/form +++ /dev/null @@ -1,6 +0,0 @@ -
-

- <++> -

-
-<++> diff --git a/.config/vim/templates/php/html b/.config/vim/templates/php/html deleted file mode 100755 index 618a876..0000000 --- a/.config/vim/templates/php/html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - <+title+> - - - -

<+title+>

- <++> - - diff --git a/.config/vim/templates/php/input b/.config/vim/templates/php/input deleted file mode 100755 index 670e334..0000000 --- a/.config/vim/templates/php/input +++ /dev/null @@ -1,2 +0,0 @@ - -<++> diff --git a/.config/vim/templates/php/li b/.config/vim/templates/php/li deleted file mode 100755 index b04522c..0000000 --- a/.config/vim/templates/php/li +++ /dev/null @@ -1,2 +0,0 @@ -
  • <++>
  • -<++> diff --git a/.config/vim/templates/php/ol b/.config/vim/templates/php/ol deleted file mode 100755 index 119e490..0000000 --- a/.config/vim/templates/php/ol +++ /dev/null @@ -1,5 +0,0 @@ -
      -
    1. <++>
    2. - <++> -
    -<++> diff --git a/.config/vim/templates/php/p b/.config/vim/templates/php/p deleted file mode 100755 index 92cd897..0000000 --- a/.config/vim/templates/php/p +++ /dev/null @@ -1,4 +0,0 @@ -

    - <++> -

    -<++> diff --git a/.config/vim/templates/php/script b/.config/vim/templates/php/script deleted file mode 100755 index 61aab67..0000000 --- a/.config/vim/templates/php/script +++ /dev/null @@ -1,4 +0,0 @@ - -<++> diff --git a/.config/vim/templates/php/ul b/.config/vim/templates/php/ul deleted file mode 100755 index f65ab78..0000000 --- a/.config/vim/templates/php/ul +++ /dev/null @@ -1,5 +0,0 @@ -
      -
    • <++>
    • - <++> -
    -<++> diff --git a/.config/vim/templates/php/while b/.config/vim/templates/php/while deleted file mode 100755 index 0e6e202..0000000 --- a/.config/vim/templates/php/while +++ /dev/null @@ -1,4 +0,0 @@ -while(<++>) -{ - <++> -} diff --git a/.config/vim/templates/python/fori b/.config/vim/templates/python/fori deleted file mode 100755 index 4fb67c9..0000000 --- a/.config/vim/templates/python/fori +++ /dev/null @@ -1,2 +0,0 @@ -for <++> in <++>: - <++> diff --git a/.config/vim/templates/python/gtkt b/.config/vim/templates/python/gtkt deleted file mode 100755 index c8a62c1..0000000 --- a/.config/vim/templates/python/gtkt +++ /dev/null @@ -1,3 +0,0 @@ -gtk.threads_enter() -<++> -gtk.threads_leave() diff --git a/.config/vim/templates/python/head b/.config/vim/templates/python/head deleted file mode 100755 index 5567fe9..0000000 --- a/.config/vim/templates/python/head +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env python -# vim:fileencoding=utf-8:ft=python -# - diff --git a/.config/vim/templates/tex/head b/.config/vim/templates/tex/head deleted file mode 100644 index 572c2d0..0000000 --- a/.config/vim/templates/tex/head +++ /dev/null @@ -1,23 +0,0 @@ -\documentclass{scrartcl} -\usepackage{graphicx} -\usepackage[utf8]{inputenc} -\usepackage[ngerman]{babel} -\usepackage[automark]{scrpage2} -\pagestyle{scrheadings} - -\ihead{<+links+>} -\chead{\pagemark} -\ohead{\headmark} -\author{Phillip Berndt} -\date{\today{}} -\title{<++>} - - -\begin{document} -\maketitle -\tableofcontents -\newpage - -\section{<++>} - -\end{document} diff --git a/.config/vim/vimrc b/.config/vim/vimrc index 729d1c4..47e1781 100644 --- a/.config/vim/vimrc +++ b/.config/vim/vimrc @@ -5,6 +5,10 @@ " set lines=35 "end +set dir=/home/ben/.cache/vim/swp/ +set runtimepath=$XDG_CONFIG_HOME/vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after +runtime bundle/vim-pathogen/autoload/pathogen.vim + " basics set nocompatible " use vim defaults set mouse=a " make sure mouse is used in all cases. @@ -51,8 +55,7 @@ set tags=./tags; " syntax highlighting syntax on " enable syntax highlighting -" set templatepath .vim/plugin/templates.vim -let g:templatePath = "~/.config/vim/templates" +let NERDTreeShowHidden=1 " highlight redundant whitespaces and tabs. "highlight RedundantSpaces ctermbg=red guibg=red @@ -86,6 +89,11 @@ vnoremap ; : " strip ^M linebreaks from dos formatted files map M :%s/ $//g +" use Tab to switch between current and last buffer +nmap :b# + +map :NERDTreeToggle + " mutt rules autocmd BufRead /tmp/mutt-* set tw=72 spell @@ -117,22 +125,21 @@ autocmd BufNewFile,BufRead /home/ben/htdocs/mutti-web/*{xsl,xml} set sw=2 ts=8 s " settings for web projects autocmd BufNewFile,BufRead /home/ben/src/qbcontact/*{php,html} set sw=4 ts=4 sts=4 +" settings for systemd +autocmd BufNewFile,BufRead /home/ben/src/systemd/* set sw=8 ts=8 sts=8 et +autocmd BufNewFile,BufRead /home/ben/src/systemd/man/*.xml set sw=2 ts=2 sts=2 et + " vimmanpager stuff " disable line numbers when using vim as manpager autocmd FileType man set nonumber nohlsearch nohlsearch -" its important that viminfo is set at the end -" some options seem to overwrite this (history..) -set viminfo+=n$XDG_CACHE_HOME/vim/viminfo -set dir=$XDG_CACHE_HOME/vim/swp/ -set runtimepath=$XDG_DATA_HOME/vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after +"colorscheme tango +"set background=light -colorscheme tango -set background=light autocmd FileType tex colorscheme delek "autocmd FileType asciidoc colorscheme inkpot -set spellfile=$XDG_DATA_HOME/vim/spell.de.add,$XDG_DATA_HOME/vim/spell.en.add +set spellfile=$XDG_CONFIG_HOME/vim/spell/spell.de.add,$XDG_CONFIG_HOME/vim/spell/spell.en.add highlight ExtraWhitespace ctermbg=red guibg=red @@ -150,3 +157,19 @@ autocmd BufWinLeave * call clearmatches() :map :tabprevious :map :tabnext :map :tabnext + +call pathogen#infect() + +colorscheme tangoX + +set noerrorbells +set visualbell +" Turn of visualbell screen flashing +set t_vb= +" +" its important that viminfo is set at the end +" some options seem to overwrite this (history..) +"set viminfo+=n$XDG_CACHE_HOME/vim/viminfo +"set dir=$XDG_CACHE_HOME/vim/swp/ +"set runtimepath=$XDG_DATA_HOME/vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after +set viminfo+=n/home/ben/.cache/vim/viminfo diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..9acba26 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,9 @@ +[submodule ".config/vim/bundle/nerdtree"] + path = .config/vim/bundle/nerdtree + url = https://github.com/scrooloose/nerdtree.git +[submodule ".config/vim/bundle/vim-pathogen"] + path = .config/vim/bundle/vim-pathogen + url = https://github.com/tpope/vim-pathogen +[submodule ".config/vim/bundle/vim-colorschemes"] + path = .config/vim/bundle/vim-colorschemes + url = https://github.com/flazz/vim-colorschemes.git -- cgit