1071d4279SBram Moolenaar" Vim filetype plugin 2071d4279SBram Moolenaar" Language: Vim 3071d4279SBram Moolenaar" Maintainer: Bram Moolenaar <[email protected]> 4d473c8c1SBram Moolenaar" Last Change: 2018 Aug 07 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 15071d4279SBram Moolenaarset cpo-=C 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 51071d4279SBram Moolenaar" Set 'comments' to format dashed lists in comments 52071d4279SBram Moolenaarsetlocal com=sO:\"\ -,mO:\"\ \ ,eO:\"\",:\" 53071d4279SBram Moolenaar 54071d4279SBram Moolenaar" Format comments to be up to 78 characters long 55071d4279SBram Moolenaarif &tw == 0 56071d4279SBram Moolenaar setlocal tw=78 57071d4279SBram Moolenaarendif 58071d4279SBram Moolenaar 59071d4279SBram Moolenaar" Comments start with a double quote 60071d4279SBram Moolenaarsetlocal commentstring=\"%s 61071d4279SBram Moolenaar 62f0b03c4eSBram Moolenaarif !exists("no_plugin_maps") && !exists("no_vim_maps") 63fd35811cSBram Moolenaar let b:did_add_maps = 1 64fd35811cSBram Moolenaar 65071d4279SBram Moolenaar " Move around functions. 66c1a11ed5SBram Moolenaar nnoremap <silent><buffer> [[ m':call search('^\s*fu\%[nction]\>', "bW")<CR> 67c1a11ed5SBram Moolenaar vnoremap <silent><buffer> [[ m':<C-U>exe "normal! gv"<Bar>call search('^\s*fu\%[nction]\>', "bW")<CR> 68c1a11ed5SBram Moolenaar nnoremap <silent><buffer> ]] m':call search('^\s*fu\%[nction]\>', "W")<CR> 69c1a11ed5SBram Moolenaar vnoremap <silent><buffer> ]] m':<C-U>exe "normal! gv"<Bar>call search('^\s*fu\%[nction]\>', "W")<CR> 70*93a1df2cSBram Moolenaar nnoremap <silent><buffer> [] m':call search('^\s*endf\%[unction]\>', "bW")<CR> 71*93a1df2cSBram Moolenaar vnoremap <silent><buffer> [] m':<C-U>exe "normal! gv"<Bar>call search('^\s*endf\%[unction]\>', "bW")<CR> 72*93a1df2cSBram Moolenaar nnoremap <silent><buffer> ][ m':call search('^\s*endf\%[unction]\>', "W")<CR> 73*93a1df2cSBram Moolenaar vnoremap <silent><buffer> ][ m':<C-U>exe "normal! gv"<Bar>call search('^\s*endf\%[unction]\>', "W")<CR> 74071d4279SBram Moolenaar 75071d4279SBram Moolenaar " Move around comments 76c1a11ed5SBram Moolenaar nnoremap <silent><buffer> ]" :call search('^\(\s*".*\n\)\@<!\(\s*"\)', "W")<CR> 77c1a11ed5SBram Moolenaar vnoremap <silent><buffer> ]" :<C-U>exe "normal! gv"<Bar>call search('^\(\s*".*\n\)\@<!\(\s*"\)', "W")<CR> 78c1a11ed5SBram Moolenaar nnoremap <silent><buffer> [" :call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW")<CR> 79c1a11ed5SBram Moolenaar vnoremap <silent><buffer> [" :<C-U>exe "normal! gv"<Bar>call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW")<CR> 80f0b03c4eSBram Moolenaarendif 81071d4279SBram Moolenaar 82071d4279SBram Moolenaar" Let the matchit plugin know what items can be matched. 83071d4279SBram Moolenaarif exists("loaded_matchit") 84071d4279SBram Moolenaar let b:match_ignorecase = 0 85071d4279SBram Moolenaar let b:match_words = 86071d4279SBram Moolenaar \ '\<fu\%[nction]\>:\<retu\%[rn]\>:\<endf\%[unction]\>,' . 875c73622aSBram Moolenaar \ '\<\(wh\%[ile]\|for\)\>:\<brea\%[k]\>:\<con\%[tinue]\>:\<end\(w\%[hile]\|fo\%[r]\)\>,' . 88071d4279SBram Moolenaar \ '\<if\>:\<el\%[seif]\>:\<en\%[dif]\>,' . 89071d4279SBram Moolenaar \ '\<try\>:\<cat\%[ch]\>:\<fina\%[lly]\>:\<endt\%[ry]\>,' . 90*93a1df2cSBram Moolenaar \ '\<aug\%[roup]\s\+\%(END\>\)\@!\S:\<aug\%[roup]\s\+END\>,' 916e932461SBram Moolenaar " Ignore syntax region commands and settings, any 'en*' would clobber 926e932461SBram Moolenaar " if-endif. 936e932461SBram Moolenaar " - set spl=de,en 946e932461SBram Moolenaar " - au! FileType javascript syntax region foldBraces start=/{/ end=/}/ … 956e932461SBram Moolenaar let b:match_skip = 'synIDattr(synID(line("."),col("."),1),"name") 966e932461SBram Moolenaar \ =~? "comment\\|string\\|vimSynReg\\|vimSet"' 97071d4279SBram Moolenaarendif 98071d4279SBram Moolenaar 995c73622aSBram Moolenaarlet &cpo = s:cpo_save 1005c73622aSBram Moolenaarunlet s:cpo_save 10126a60b45SBram Moolenaar 10226a60b45SBram Moolenaar" removed this, because 'cpoptions' is a global option. 10326a60b45SBram Moolenaar" setlocal cpo+=M " makes \%( match \) 104