亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? items.vim

?? vim的自動配置文件
?? VIM
?? 第 1 頁 / 共 2 頁
字號:
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        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)                let result = omni#cpp#utils#CreateTypeInfo(substitute(tagItem.typeref, '\w\+:', '', 'g'))            endif        else            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        endif    endif    return resultendfunc" Get the type info string from the returned type of functionfunction! 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 resultendfunc" Resolve a symbol, return a tagItem" Gets the first symbol found in the context stackfunction! 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 tagItemendfunc" Return if the tag item represent an unnamed typefunction! 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 bResultendfunc" Search the declaration of a variable and return the type infofunction! 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 searchdecl(a:szVariable, 0, 1)==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 resultendfunc" Search a declaration" @return"   - tokens of the current instruction if success"   - empty list if failurefunction! s:SearchDecl(szVariable)    let result = {}    let originalPos = getpos('.')    let searchResult = searchdecl(a:szVariable, 0, 1)    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 resultendfunc" 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 instructionfunction! s:ExtractTypeInfoFromDecl(tokens)    return omni#cpp#utils#ExtractTypeInfoFromTokens(a:tokens)endfunc" Convert tokens to stringfunction! 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<MyClass*>(something)" @return type info stringfunction! 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 stringfunction! 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 tokensfunction! 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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区四区在线观看 | 国产三级欧美三级| 日本精品视频一区二区| 丁香婷婷综合色啪| 国产精品99久久久久久似苏梦涵| 老司机一区二区| 青椒成人免费视频| 六月丁香婷婷色狠狠久久| 日本不卡一二三| 久久99热99| 国产精品一卡二卡在线观看| 国产乱码精品1区2区3区| 国产v综合v亚洲欧| 国产 日韩 欧美大片| 成人性生交大片免费看中文| 99久久伊人网影院| 91玉足脚交白嫩脚丫在线播放| 91免费在线看| 欧美体内she精高潮| 欧美久久高跟鞋激| 欧美r级在线观看| 国产精品美女久久久久高潮| 亚洲欧洲制服丝袜| 午夜精品一区二区三区电影天堂 | 日韩免费观看高清完整版| 日韩三级免费观看| 国产肉丝袜一区二区| 国产精品短视频| 一区二区欧美国产| 免费观看日韩av| 丁香婷婷综合五月| 欧美色老头old∨ideo| 久久亚洲影视婷婷| 亚洲人快播电影网| 蜜臀av性久久久久av蜜臀妖精| 老司机午夜精品| av亚洲精华国产精华| 欧美老肥妇做.爰bbww视频| 26uuu久久综合| 亚洲最大色网站| 国产一区二区视频在线播放| 色婷婷亚洲精品| 精品国产伦一区二区三区观看方式| 国产精品情趣视频| 日韩电影免费在线看| 99久久99久久免费精品蜜臀| 制服丝袜中文字幕亚洲| 欧美国产精品v| 偷窥国产亚洲免费视频| www.在线成人| 日韩你懂的电影在线观看| 亚洲六月丁香色婷婷综合久久| 九九国产精品视频| 欧美在线观看你懂的| 中文在线一区二区| 久久99国产精品麻豆| 欧美日韩一区二区三区视频 | 色激情天天射综合网| 精品捆绑美女sm三区| 亚洲国产婷婷综合在线精品| 国产suv精品一区二区三区| 日韩一区二区三区精品视频| 一区二区在线观看视频| 白白色 亚洲乱淫| 久久人人爽爽爽人久久久| 日韩高清一区在线| 欧美日韩一区中文字幕| 亚洲乱码国产乱码精品精可以看 | 亚洲一二三四在线观看| 不卡一区中文字幕| 中文字幕的久久| 国产91对白在线观看九色| 久久综合久久综合久久综合| 免费在线看成人av| 欧美精品精品一区| 午夜精品久久久久久| 欧美日韩一区小说| 亚洲国产美女搞黄色| 91激情五月电影| 亚洲男人的天堂网| 91久久精品一区二区三区| 亚洲免费三区一区二区| 色综合天天综合| 亚洲视频在线观看三级| 91免费国产在线观看| 亚洲人成精品久久久久久 | 亚洲在线观看免费视频| 一道本成人在线| 亚洲国产sm捆绑调教视频| 欧美色综合天天久久综合精品| 亚洲一区二区三区视频在线| 欧美天天综合网| 日本一区中文字幕| 欧美一级二级三级乱码| 久久se精品一区精品二区| 国产午夜精品理论片a级大结局| 国产成人精品免费网站| 日韩美女精品在线| 欧美浪妇xxxx高跟鞋交| 国产一区欧美二区| 国产精品短视频| 欧美精选一区二区| 国产不卡一区视频| 一区二区三区不卡视频在线观看| 欧美日韩一区国产| 国产精品2024| 一区二区三国产精华液| 精品国产成人在线影院 | 激情都市一区二区| 日本一二三四高清不卡| 欧美日韩国产美| 国产资源在线一区| 一区二区三区在线视频免费观看| 欧美一级精品在线| 91在线免费看| 欧美aⅴ一区二区三区视频| 国产女人18毛片水真多成人如厕| 色综合天天综合色综合av| 极品美女销魂一区二区三区| 亚洲男女一区二区三区| 精品国产伦一区二区三区免费| 一本色道久久综合精品竹菊| 男女性色大片免费观看一区二区 | 91网上在线视频| 日日夜夜精品视频免费 | 一本色道久久综合狠狠躁的推荐 | 欧美高清在线视频| 777午夜精品免费视频| 成人国产精品免费观看动漫 | 国产成人精品影视| 午夜精品久久久久久久| 综合色中文字幕| 欧美国产综合色视频| 日韩一区二区三区在线视频| 欧美亚洲动漫制服丝袜| 成人av免费在线播放| 国内欧美视频一区二区 | 全国精品久久少妇| 亚洲精品第1页| 中文字幕在线观看一区| 久久亚洲综合av| 日韩三级精品电影久久久| 欧美区在线观看| 在线观看三级视频欧美| 91丝袜美女网| 成人av在线资源网| 成人av集中营| 国产iv一区二区三区| 国产精品资源在线观看| 蜜桃久久久久久| 日本va欧美va瓶| 日韩精品国产欧美| 偷拍与自拍一区| 青椒成人免费视频| 免费成人在线观看| 蜜臀a∨国产成人精品| 日韩成人dvd| 久久99精品久久久久久动态图| 久久狠狠亚洲综合| 另类中文字幕网| 久久99国内精品| 国产美女主播视频一区| 国产精品911| 99久久精品国产毛片| 色婷婷国产精品综合在线观看| 色94色欧美sute亚洲线路一久| 色爱区综合激月婷婷| 欧美日韩黄色影视| 欧美一级日韩免费不卡| 日韩视频一区二区在线观看| 日韩精品专区在线影院重磅| 日韩欧美电影一区| 欧美韩日一区二区三区| 亚洲欧美另类小说| 三级不卡在线观看| 国产剧情一区二区| av在线不卡电影| 欧美日韩精品一区二区在线播放| 欧美日韩亚洲不卡| 精品av久久707| 综合欧美一区二区三区| 视频一区二区国产| 国产美女在线观看一区| 99国内精品久久| 91精品一区二区三区久久久久久| 精品国产1区2区3区| 国产精品国产三级国产专播品爱网| 亚洲欧洲国产日本综合| 日韩精品三区四区| 国产成人免费在线观看不卡| 日本福利一区二区| 欧美一区二区三区日韩视频| 久久毛片高清国产| 亚洲国产精品久久久久秋霞影院| 精品亚洲成a人| 欧美性xxxxxxxx| 国产午夜精品久久久久久久| 亚洲福利电影网| 国产高清不卡一区| 精品婷婷伊人一区三区三|