11aeaf8c0SBram Moolenaar" Vim filetype plugin file 21aeaf8c0SBram Moolenaar" Language: Zimbu 31aeaf8c0SBram Moolenaar" Maintainer: Bram Moolenaar <[email protected]> 4*519cc559SBram Moolenaar" Last Change: 2021 Nov 12 51aeaf8c0SBram Moolenaar 61aeaf8c0SBram Moolenaar" Only do this when not done yet for this buffer 71aeaf8c0SBram Moolenaarif exists("b:did_ftplugin") 81aeaf8c0SBram Moolenaar finish 91aeaf8c0SBram Moolenaarendif 101aeaf8c0SBram Moolenaar 111aeaf8c0SBram Moolenaar" Don't load another plugin for this buffer 121aeaf8c0SBram Moolenaarlet b:did_ftplugin = 1 131aeaf8c0SBram Moolenaar 141aeaf8c0SBram Moolenaar" Using line continuation here. 151aeaf8c0SBram Moolenaarlet s:cpo_save = &cpo 161aeaf8c0SBram Moolenaarset cpo-=C 171aeaf8c0SBram Moolenaar 188e52a593SBram Moolenaarlet b:undo_ftplugin = "setl fo< com< ofu< efm< tw< et< sts< sw< | if has('vms') | setl isk< | endif" 191aeaf8c0SBram Moolenaar 201aeaf8c0SBram Moolenaar" Set 'formatoptions' to break comment lines but not other lines, 211aeaf8c0SBram Moolenaar" and insert the comment leader when hitting <CR> or using "o". 221aeaf8c0SBram Moolenaarsetlocal fo-=t fo+=croql 231aeaf8c0SBram Moolenaar 241aeaf8c0SBram Moolenaar" Set completion with CTRL-X CTRL-O to autoloaded function. 251aeaf8c0SBram Moolenaarif exists('&ofu') 261aeaf8c0SBram Moolenaar setlocal ofu=ccomplete#Complete 271aeaf8c0SBram Moolenaarendif 281aeaf8c0SBram Moolenaar 291aeaf8c0SBram Moolenaar" Set 'comments' to format dashed lists in comments. 301aeaf8c0SBram Moolenaar" And to keep Zudocu comment characters. 311aeaf8c0SBram Moolenaarsetlocal comments=sO:#\ -,mO:#\ \ ,:#=,:#-,:#%,:# 321aeaf8c0SBram Moolenaar 331aeaf8c0SBram Moolenaarsetlocal errorformat^=%f\ line\ %l\ col\ %c:\ %m,ERROR:\ %m 341aeaf8c0SBram Moolenaar 351aeaf8c0SBram Moolenaar" When the matchit plugin is loaded, this makes the % command skip parens and 361aeaf8c0SBram Moolenaar" braces in comments. 37*519cc559SBram Moolenaarif exists("loaded_matchit") && !exists("b:match_words") 38d09acef4SBram Moolenaar let b:match_words = '\(^\s*\)\@<=\(MODULE\|CLASS\|INTERFACE\|BITS\|ENUM\|SHARED\|FUNC\|REPLACE\|DEFINE\|PROC\|EQUAL\|MAIN\|IF\|GENERATE_IF\|WHILE\|REPEAT\|WITH\|DO\|FOR\|SWITCH\|TRY\)\>\|{\s*$:\(^\s*\)\@<=\(ELSE\|ELSEIF\|GENERATE_ELSE\|GENERATE_ELSEIF\|CATCH\|FINALLY\)\>:\(^\s*\)\@<=\(}\|\<UNTIL\>\)' 391aeaf8c0SBram Moolenaar let b:match_skip = 's:comment\|string\|zimbuchar' 40*519cc559SBram Moolenaar let b:undo_ftplugin ..= " | unlet! b:match_words b:match_skip" 41*519cc559SBram Moolenaarendif 421aeaf8c0SBram Moolenaar 431aeaf8c0SBram Moolenaarsetlocal tw=78 441aeaf8c0SBram Moolenaarsetlocal et sts=2 sw=2 451aeaf8c0SBram Moolenaar 461aeaf8c0SBram Moolenaar" Does replace when a dot, space or closing brace is typed. 471aeaf8c0SBram Moolenaarfunc! GCUpperDot(what) 48d09acef4SBram Moolenaar if v:char != ' ' && v:char != "\r" && v:char != "\x1b" && v:char != '.' && v:char != ')' && v:char != '}' && v:char != ',' 491aeaf8c0SBram Moolenaar " no space or dot after the typed text 501aeaf8c0SBram Moolenaar let g:got_char = v:char 511aeaf8c0SBram Moolenaar return a:what 521aeaf8c0SBram Moolenaar endif 53d09acef4SBram Moolenaar return GCUpperCommon(a:what) 54d09acef4SBram Moolenaarendfunc 55d09acef4SBram Moolenaar 56d09acef4SBram Moolenaar" Does not replace when a dot is typed. 57d09acef4SBram Moolenaarfunc! GCUpper(what) 58d09acef4SBram Moolenaar if v:char != ' ' && v:char != "\r" && v:char != "\x1b" && v:char != ')' && v:char != ',' 59d09acef4SBram Moolenaar " no space or other "terminating" character after the typed text 60d09acef4SBram Moolenaar let g:got_char = v:char 61d09acef4SBram Moolenaar return a:what 62d09acef4SBram Moolenaar endif 63d09acef4SBram Moolenaar return GCUpperCommon(a:what) 64d09acef4SBram Moolenaarendfunc 65d09acef4SBram Moolenaar 66d09acef4SBram Moolenaar" Only replaces when a space is typed. 67d09acef4SBram Moolenaarfunc! GCUpperSpace(what) 68d09acef4SBram Moolenaar if v:char != ' ' 69d09acef4SBram Moolenaar " no space after the typed text 70d09acef4SBram Moolenaar let g:got_char = v:char 71d09acef4SBram Moolenaar return a:what 72d09acef4SBram Moolenaar endif 73d09acef4SBram Moolenaar return GCUpperCommon(a:what) 74d09acef4SBram Moolenaarendfunc 75d09acef4SBram Moolenaar 76d09acef4SBram Moolenaarfunc! GCUpperCommon(what) 77d09acef4SBram Moolenaar let col = col(".") - strlen(a:what) 781aeaf8c0SBram Moolenaar if col > 1 && getline('.')[col - 2] != ' ' 791aeaf8c0SBram Moolenaar " no space before the typed text 801aeaf8c0SBram Moolenaar let g:got_char = 999 811aeaf8c0SBram Moolenaar return a:what 821aeaf8c0SBram Moolenaar endif 831aeaf8c0SBram Moolenaar let synName = synIDattr(synID(line("."), col(".") - 2, 1), "name") 841aeaf8c0SBram Moolenaar if synName =~ 'Comment\|String\|zimbuCregion\|\<c' 851aeaf8c0SBram Moolenaar " inside a comment or C code 861aeaf8c0SBram Moolenaar let g:got_char = 777 871aeaf8c0SBram Moolenaar return a:what 881aeaf8c0SBram Moolenaar endif 891aeaf8c0SBram Moolenaar let g:got_char = 1111 901aeaf8c0SBram Moolenaar return toupper(a:what) 911aeaf8c0SBram Moolenaarendfunc 921aeaf8c0SBram Moolenaar 931aeaf8c0SBram Moolenaariabbr <buffer> <expr> alias GCUpperSpace("alias") 941aeaf8c0SBram Moolenaariabbr <buffer> <expr> arg GCUpperDot("arg") 951aeaf8c0SBram Moolenaariabbr <buffer> <expr> break GCUpper("break") 961aeaf8c0SBram Moolenaariabbr <buffer> <expr> case GCUpperSpace("case") 971aeaf8c0SBram Moolenaariabbr <buffer> <expr> catch GCUpperSpace("catch") 981aeaf8c0SBram Moolenaariabbr <buffer> <expr> check GCUpperDot("check") 991aeaf8c0SBram Moolenaariabbr <buffer> <expr> class GCUpperSpace("class") 100d09acef4SBram Moolenaariabbr <buffer> <expr> interface GCUpperSpace("interface") 101d09acef4SBram Moolenaariabbr <buffer> <expr> implements GCUpperSpace("implements") 1021aeaf8c0SBram Moolenaariabbr <buffer> <expr> shared GCUpperSpace("shared") 1031aeaf8c0SBram Moolenaariabbr <buffer> <expr> continue GCUpper("continue") 1041aeaf8c0SBram Moolenaariabbr <buffer> <expr> default GCUpper("default") 1051aeaf8c0SBram Moolenaariabbr <buffer> <expr> extends GCUpper("extends") 1061aeaf8c0SBram Moolenaariabbr <buffer> <expr> do GCUpper("do") 1071aeaf8c0SBram Moolenaariabbr <buffer> <expr> else GCUpper("else") 1081aeaf8c0SBram Moolenaariabbr <buffer> <expr> elseif GCUpperSpace("elseif") 1091aeaf8c0SBram Moolenaariabbr <buffer> <expr> enum GCUpperSpace("enum") 1101aeaf8c0SBram Moolenaariabbr <buffer> <expr> exit GCUpper("exit") 1111aeaf8c0SBram Moolenaariabbr <buffer> <expr> false GCUpper("false") 1121aeaf8c0SBram Moolenaariabbr <buffer> <expr> fail GCUpper("fail") 1131aeaf8c0SBram Moolenaariabbr <buffer> <expr> finally GCUpper("finally") 1141aeaf8c0SBram Moolenaariabbr <buffer> <expr> for GCUpperSpace("for") 1151aeaf8c0SBram Moolenaariabbr <buffer> <expr> func GCUpperSpace("func") 1161aeaf8c0SBram Moolenaariabbr <buffer> <expr> if GCUpperSpace("if") 1171aeaf8c0SBram Moolenaariabbr <buffer> <expr> import GCUpperSpace("import") 1181aeaf8c0SBram Moolenaariabbr <buffer> <expr> in GCUpperSpace("in") 1191aeaf8c0SBram Moolenaariabbr <buffer> <expr> io GCUpperDot("io") 1201aeaf8c0SBram Moolenaariabbr <buffer> <expr> main GCUpper("main") 1211aeaf8c0SBram Moolenaariabbr <buffer> <expr> module GCUpperSpace("module") 1221aeaf8c0SBram Moolenaariabbr <buffer> <expr> new GCUpper("new") 1231aeaf8c0SBram Moolenaariabbr <buffer> <expr> nil GCUpper("nil") 1241aeaf8c0SBram Moolenaariabbr <buffer> <expr> ok GCUpper("ok") 1251aeaf8c0SBram Moolenaariabbr <buffer> <expr> proc GCUpperSpace("proc") 1261aeaf8c0SBram Moolenaariabbr <buffer> <expr> proceed GCUpper("proceed") 1271aeaf8c0SBram Moolenaariabbr <buffer> <expr> return GCUpper("return") 1281aeaf8c0SBram Moolenaariabbr <buffer> <expr> step GCUpperSpace("step") 1291aeaf8c0SBram Moolenaariabbr <buffer> <expr> switch GCUpperSpace("switch") 1301aeaf8c0SBram Moolenaariabbr <buffer> <expr> sys GCUpperDot("sys") 1311aeaf8c0SBram Moolenaariabbr <buffer> <expr> this GCUpperDot("this") 1321aeaf8c0SBram Moolenaariabbr <buffer> <expr> throw GCUpperSpace("throw") 1331aeaf8c0SBram Moolenaariabbr <buffer> <expr> try GCUpper("try") 1341aeaf8c0SBram Moolenaariabbr <buffer> <expr> to GCUpperSpace("to") 1351aeaf8c0SBram Moolenaariabbr <buffer> <expr> true GCUpper("true") 1361aeaf8c0SBram Moolenaariabbr <buffer> <expr> until GCUpperSpace("until") 1371aeaf8c0SBram Moolenaariabbr <buffer> <expr> while GCUpperSpace("while") 1381aeaf8c0SBram Moolenaariabbr <buffer> <expr> repeat GCUpper("repeat") 1391aeaf8c0SBram Moolenaar 140*519cc559SBram Moolenaarlet b:undo_ftplugin ..= 141*519cc559SBram Moolenaar \ " | iunabbr <buffer> alias" .. 142*519cc559SBram Moolenaar \ " | iunabbr <buffer> arg" .. 143*519cc559SBram Moolenaar \ " | iunabbr <buffer> break" .. 144*519cc559SBram Moolenaar \ " | iunabbr <buffer> case" .. 145*519cc559SBram Moolenaar \ " | iunabbr <buffer> catch" .. 146*519cc559SBram Moolenaar \ " | iunabbr <buffer> check" .. 147*519cc559SBram Moolenaar \ " | iunabbr <buffer> class" .. 148*519cc559SBram Moolenaar \ " | iunabbr <buffer> interface" .. 149*519cc559SBram Moolenaar \ " | iunabbr <buffer> implements" .. 150*519cc559SBram Moolenaar \ " | iunabbr <buffer> shared" .. 151*519cc559SBram Moolenaar \ " | iunabbr <buffer> continue" .. 152*519cc559SBram Moolenaar \ " | iunabbr <buffer> default" .. 153*519cc559SBram Moolenaar \ " | iunabbr <buffer> extends" .. 154*519cc559SBram Moolenaar \ " | iunabbr <buffer> do" .. 155*519cc559SBram Moolenaar \ " | iunabbr <buffer> else" .. 156*519cc559SBram Moolenaar \ " | iunabbr <buffer> elseif" .. 157*519cc559SBram Moolenaar \ " | iunabbr <buffer> enum" .. 158*519cc559SBram Moolenaar \ " | iunabbr <buffer> exit" .. 159*519cc559SBram Moolenaar \ " | iunabbr <buffer> false" .. 160*519cc559SBram Moolenaar \ " | iunabbr <buffer> fail" .. 161*519cc559SBram Moolenaar \ " | iunabbr <buffer> finally" .. 162*519cc559SBram Moolenaar \ " | iunabbr <buffer> for" .. 163*519cc559SBram Moolenaar \ " | iunabbr <buffer> func" .. 164*519cc559SBram Moolenaar \ " | iunabbr <buffer> if" .. 165*519cc559SBram Moolenaar \ " | iunabbr <buffer> import" .. 166*519cc559SBram Moolenaar \ " | iunabbr <buffer> in" .. 167*519cc559SBram Moolenaar \ " | iunabbr <buffer> io" .. 168*519cc559SBram Moolenaar \ " | iunabbr <buffer> main" .. 169*519cc559SBram Moolenaar \ " | iunabbr <buffer> module" .. 170*519cc559SBram Moolenaar \ " | iunabbr <buffer> new" .. 171*519cc559SBram Moolenaar \ " | iunabbr <buffer> nil" .. 172*519cc559SBram Moolenaar \ " | iunabbr <buffer> ok" .. 173*519cc559SBram Moolenaar \ " | iunabbr <buffer> proc" .. 174*519cc559SBram Moolenaar \ " | iunabbr <buffer> proceed" .. 175*519cc559SBram Moolenaar \ " | iunabbr <buffer> return" .. 176*519cc559SBram Moolenaar \ " | iunabbr <buffer> step" .. 177*519cc559SBram Moolenaar \ " | iunabbr <buffer> switch" .. 178*519cc559SBram Moolenaar \ " | iunabbr <buffer> sys" .. 179*519cc559SBram Moolenaar \ " | iunabbr <buffer> this" .. 180*519cc559SBram Moolenaar \ " | iunabbr <buffer> throw" .. 181*519cc559SBram Moolenaar \ " | iunabbr <buffer> try" .. 182*519cc559SBram Moolenaar \ " | iunabbr <buffer> to" .. 183*519cc559SBram Moolenaar \ " | iunabbr <buffer> true" .. 184*519cc559SBram Moolenaar \ " | iunabbr <buffer> until" .. 185*519cc559SBram Moolenaar \ " | iunabbr <buffer> while" .. 186*519cc559SBram Moolenaar \ " | iunabbr <buffer> repeat" 187*519cc559SBram Moolenaar 188f0b03c4eSBram Moolenaarif !exists("no_plugin_maps") && !exists("no_zimbu_maps") 1891aeaf8c0SBram Moolenaar nnoremap <silent> <buffer> [[ m`:call ZimbuGoStartBlock()<CR> 1901aeaf8c0SBram Moolenaar nnoremap <silent> <buffer> ]] m`:call ZimbuGoEndBlock()<CR> 191*519cc559SBram Moolenaar let b:undo_ftplugin ..= 192*519cc559SBram Moolenaar \ " | silent! exe 'nunmap <buffer> [['" .. 193*519cc559SBram Moolenaar \ " | silent! exe 'nunmap <buffer> ]]'" 194f0b03c4eSBram Moolenaarendif 1951aeaf8c0SBram Moolenaar 1961aeaf8c0SBram Moolenaar" Using a function makes sure the search pattern is restored 1971aeaf8c0SBram Moolenaarfunc! ZimbuGoStartBlock() 1981aeaf8c0SBram Moolenaar ?^\s*\(FUNC\|PROC\|MAIN\|ENUM\|CLASS\|INTERFACE\)\> 1991aeaf8c0SBram Moolenaarendfunc 2001aeaf8c0SBram Moolenaarfunc! ZimbuGoEndBlock() 2011aeaf8c0SBram Moolenaar /^\s*\(FUNC\|PROC\|MAIN\|ENUM\|CLASS\|INTERFACE\)\> 2021aeaf8c0SBram Moolenaarendfunc 2031aeaf8c0SBram Moolenaar 2041aeaf8c0SBram Moolenaar 2051aeaf8c0SBram Moolenaarlet &cpo = s:cpo_save 2061aeaf8c0SBram Moolenaarunlet s:cpo_save 207