1071d4279SBram Moolenaar" Vim filetype plugin 2071d4279SBram Moolenaar" Language: Vim 3071d4279SBram Moolenaar" Maintainer: Bram Moolenaar <[email protected]> 4*56994d21SBram Moolenaar" Last Change: 2021 Apr 11 5071d4279SBram Moolenaar 6071d4279SBram Moolenaar" Only do this when not done yet for this buffer 7071d4279SBram Moolenaarif exists("b:did_ftplugin") 8071d4279SBram Moolenaar finish 9071d4279SBram Moolenaarendif 10071d4279SBram Moolenaar 11071d4279SBram Moolenaar" Don't load another plugin for this buffer 12071d4279SBram Moolenaarlet b:did_ftplugin = 1 13071d4279SBram Moolenaar 145c73622aSBram Moolenaarlet s:cpo_save = &cpo 15388a5d4fSBram Moolenaarset cpo&vim 16071d4279SBram Moolenaar 17fd35811cSBram Moolenaarif !exists('*VimFtpluginUndo') 18fd35811cSBram Moolenaar func VimFtpluginUndo() 19fd35811cSBram Moolenaar setl fo< isk< com< tw< commentstring< 20d473c8c1SBram Moolenaar if exists('b:did_add_maps') 21d473c8c1SBram Moolenaar silent! nunmap <buffer> [[ 22d473c8c1SBram Moolenaar silent! vunmap <buffer> [[ 23d473c8c1SBram Moolenaar silent! nunmap <buffer> ]] 24d473c8c1SBram Moolenaar silent! vunmap <buffer> ]] 25d473c8c1SBram Moolenaar silent! nunmap <buffer> [] 26d473c8c1SBram Moolenaar silent! vunmap <buffer> [] 27d473c8c1SBram Moolenaar silent! nunmap <buffer> ][ 28d473c8c1SBram Moolenaar silent! vunmap <buffer> ][ 29d473c8c1SBram Moolenaar silent! nunmap <buffer> ]" 30d473c8c1SBram Moolenaar silent! vunmap <buffer> ]" 31d473c8c1SBram Moolenaar silent! nunmap <buffer> [" 32d473c8c1SBram Moolenaar silent! vunmap <buffer> [" 33fd35811cSBram Moolenaar endif 34fd35811cSBram Moolenaar unlet! b:match_ignorecase b:match_words b:match_skip b:did_add_maps 35fd35811cSBram Moolenaar endfunc 36fd35811cSBram Moolenaarendif 37fd35811cSBram Moolenaar 38fd35811cSBram Moolenaarlet b:undo_ftplugin = "call VimFtpluginUndo()" 39071d4279SBram Moolenaar 40071d4279SBram Moolenaar" Set 'formatoptions' to break comment lines but not other lines, 41071d4279SBram Moolenaar" and insert the comment leader when hitting <CR> or using "o". 42071d4279SBram Moolenaarsetlocal fo-=t fo+=croql 43071d4279SBram Moolenaar 445c73622aSBram Moolenaar" To allow tag lookup via CTRL-] for autoload functions, '#' must be a 455c73622aSBram Moolenaar" keyword character. E.g., for netrw#Nread(). 465c73622aSBram Moolenaarsetlocal isk+=# 475c73622aSBram Moolenaar 487f2e9d7cSBram Moolenaar" Use :help to lookup the keyword under the cursor with K. 497f2e9d7cSBram Moolenaarsetlocal keywordprg=:help 507f2e9d7cSBram Moolenaar 5182be4849SBram Moolenaarif "\n" .. getline(1, 10)->join("\n") =~# '\n\s*vim9\%[script]\>' 52071d4279SBram Moolenaar " Set 'comments' to format dashed lists in comments 5382be4849SBram Moolenaar setlocal com=sO:#\ -,mO:#\ \ ,eO:##,:# 5498a29d00SBram Moolenaar " Comments starts with # in Vim9 script 5598a29d00SBram Moolenaar setlocal commentstring=#%s 5682be4849SBram Moolenaarelse 579faec4e3SBram Moolenaar setlocal com=sO:\"\ -,mO:\"\ \ ,eO:\"\",:\" 5898a29d00SBram Moolenaar " Comments starts with a double quote in legacy script 5998a29d00SBram Moolenaar setlocal commentstring=\"%s 6082be4849SBram Moolenaarendif 6182be4849SBram Moolenaar 62071d4279SBram Moolenaar 63071d4279SBram Moolenaar" Format comments to be up to 78 characters long 64071d4279SBram Moolenaarif &tw == 0 65071d4279SBram Moolenaar setlocal tw=78 66071d4279SBram Moolenaarendif 67071d4279SBram Moolenaar 68f0b03c4eSBram Moolenaarif !exists("no_plugin_maps") && !exists("no_vim_maps") 69fd35811cSBram Moolenaar let b:did_add_maps = 1 70fd35811cSBram Moolenaar 71071d4279SBram Moolenaar " Move around functions. 72388a5d4fSBram Moolenaar nnoremap <silent><buffer> [[ m':call search('^\s*\(fu\%[nction]\\|def\)\>', "bW")<CR> 73388a5d4fSBram Moolenaar vnoremap <silent><buffer> [[ m':<C-U>exe "normal! gv"<Bar>call search('^\s*\(fu\%[nction]\\|def\)\>', "bW")<CR> 74388a5d4fSBram Moolenaar nnoremap <silent><buffer> ]] m':call search('^\s*\(fu\%[nction]\\|def\)\>', "W")<CR> 75388a5d4fSBram Moolenaar vnoremap <silent><buffer> ]] m':<C-U>exe "normal! gv"<Bar>call search('^\s*\(fu\%[nction]\\|def\)\>', "W")<CR> 76388a5d4fSBram Moolenaar nnoremap <silent><buffer> [] m':call search('^\s*end\(f\%[unction]\\|def\)\>', "bW")<CR> 77388a5d4fSBram Moolenaar vnoremap <silent><buffer> [] m':<C-U>exe "normal! gv"<Bar>call search('^\s*end\(f\%[unction]\\|def\)\>', "bW")<CR> 78388a5d4fSBram Moolenaar nnoremap <silent><buffer> ][ m':call search('^\s*end\(f\%[unction]\\|def\)\>', "W")<CR> 79388a5d4fSBram Moolenaar vnoremap <silent><buffer> ][ m':<C-U>exe "normal! gv"<Bar>call search('^\s*end\(f\%[unction]\\|def\)\>', "W")<CR> 80071d4279SBram Moolenaar 81071d4279SBram Moolenaar " Move around comments 82c1a11ed5SBram Moolenaar nnoremap <silent><buffer> ]" :call search('^\(\s*".*\n\)\@<!\(\s*"\)', "W")<CR> 83c1a11ed5SBram Moolenaar vnoremap <silent><buffer> ]" :<C-U>exe "normal! gv"<Bar>call search('^\(\s*".*\n\)\@<!\(\s*"\)', "W")<CR> 84c1a11ed5SBram Moolenaar nnoremap <silent><buffer> [" :call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW")<CR> 85c1a11ed5SBram Moolenaar vnoremap <silent><buffer> [" :<C-U>exe "normal! gv"<Bar>call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW")<CR> 86f0b03c4eSBram Moolenaarendif 87071d4279SBram Moolenaar 88071d4279SBram Moolenaar" Let the matchit plugin know what items can be matched. 89071d4279SBram Moolenaarif exists("loaded_matchit") 90071d4279SBram Moolenaar let b:match_ignorecase = 0 91e0e39175SBram Moolenaar " "func" can also be used as a type: 92e0e39175SBram Moolenaar " var Ref: func 93e0e39175SBram Moolenaar " or to list functions: 94e0e39175SBram Moolenaar " func name 95e0e39175SBram Moolenaar " require a parenthesis following, then there can be an "endfunc". 96071d4279SBram Moolenaar let b:match_words = 97*56994d21SBram Moolenaar \ '\<\%(fu\%[nction]\|def\)!\=\s\+\S\+(:\%(\%(^\||\)\s*\)\@<=\<retu\%[rn]\>:\%(\%(^\||\)\s*\)\@<=\<\%(endf\%[unction]\|enddef\)\>,' . 98*56994d21SBram Moolenaar \ '\<\(wh\%[ile]\|for\)\>:\%(\%(^\||\)\s*\)\@<=\<brea\%[k]\>:\%(\%(^\||\)\s*\)\@<=\<con\%[tinue]\>:\%(\%(^\||\)\s*\)\@<=\<end\(w\%[hile]\|fo\%[r]\)\>,' . 99*56994d21SBram Moolenaar \ '\<if\>:\%(\%(^\||\)\s*\)\@<=\<el\%[seif]\>:\%(\%(^\||\)\s*\)\@<=\<en\%[dif]\>,' . 1008a7d6542SBram Moolenaar \ '{:},' . 101*56994d21SBram Moolenaar \ '\<try\>:\%(\%(^\||\)\s*\)\@<=\<cat\%[ch]\>:\%(\%(^\||\)\s*\)\@<=\<fina\%[lly]\>:\%(\%(^\||\)\s*\)\@<=\<endt\%[ry]\>,' . 10293a1df2cSBram Moolenaar \ '\<aug\%[roup]\s\+\%(END\>\)\@!\S:\<aug\%[roup]\s\+END\>,' 1036e932461SBram Moolenaar " Ignore syntax region commands and settings, any 'en*' would clobber 1046e932461SBram Moolenaar " if-endif. 1056e932461SBram Moolenaar " - set spl=de,en 1066e932461SBram Moolenaar " - au! FileType javascript syntax region foldBraces start=/{/ end=/}/ … 1076e932461SBram Moolenaar let b:match_skip = 'synIDattr(synID(line("."),col("."),1),"name") 1086e932461SBram Moolenaar \ =~? "comment\\|string\\|vimSynReg\\|vimSet"' 109071d4279SBram Moolenaarendif 110071d4279SBram Moolenaar 1115c73622aSBram Moolenaarlet &cpo = s:cpo_save 1125c73622aSBram Moolenaarunlet s:cpo_save 11326a60b45SBram Moolenaar 11426a60b45SBram Moolenaar" removed this, because 'cpoptions' is a global option. 11526a60b45SBram Moolenaar" setlocal cpo+=M " makes \%( match \) 116