vb.vim (3563B)
1 " Vim filetype plugin file 2 " Language: Visual Basic (ft=vb) 3 " Maintainer: Doug Kearns <dougkearns@gmail.com> 4 " Previous Maintainer: Johannes Zellner <johannes@zellner.org> 5 " Last Change: 2024 Jan 14 6 7 if exists("b:did_ftplugin") 8 finish 9 endif 10 let b:did_ftplugin = 1 11 12 let s:cpo_save = &cpo 13 set cpo&vim 14 15 setlocal comments=sr:'\ -,mb:'\ \ ,el:'\ \ ,:' 16 setlocal commentstring='\ %s 17 setlocal formatoptions-=t formatoptions+=croql 18 19 let b:undo_ftplugin = "setlocal com< cms< fo<" 20 21 " we need this wrapper, as call doesn't allow a count 22 function! s:VbSearch(pattern, flags) 23 let cnt = v:count1 24 while cnt > 0 25 call search(a:pattern, a:flags) 26 let cnt = cnt - 1 27 endwhile 28 endfunction 29 30 if !exists("no_plugin_maps") && !exists("no_vb_maps") 31 nnoremap <buffer> <silent> [[ <Cmd>call <SID>VbSearch('^\s*\%(\%(private\<Bar>public\)\s\+\)\=\%(function\<Bar>sub\)', 'sbW')<CR> 32 vnoremap <buffer> <silent> [[ <Cmd>call <SID>VbSearch('^\s*\%(\%(private\<Bar>public\)\s\+\)\=\%(function\<Bar>sub\)', 'sbW')<CR> 33 nnoremap <buffer> <silent> ]] <Cmd>call <SID>VbSearch('^\s*\%(\%(private\<Bar>public\)\s\+\)\=\%(function\<Bar>sub\)', 'sW')<CR> 34 vnoremap <buffer> <silent> ]] <Cmd>call <SID>VbSearch('^\s*\%(\%(private\<Bar>public\)\s\+\)\=\%(function\<Bar>sub\)', 'sW')<CR> 35 nnoremap <buffer> <silent> [] <Cmd>call <SID>VbSearch('^\s*end\s\+\%(function\<Bar>sub\)', 'sbW')<CR> 36 vnoremap <buffer> <silent> [] <Cmd>call <SID>VbSearch('^\s*end\s\+\%(function\<Bar>sub\)', 'sbW')<CR> 37 nnoremap <buffer> <silent> ][ <Cmd>call <SID>VbSearch('^\s*end\s\+\%(function\<Bar>sub\)', 'sW')<CR> 38 vnoremap <buffer> <silent> ][ <Cmd>call <SID>VbSearch('^\s*end\s\+\%(function\<Bar>sub\)', 'sW')<CR> 39 let b:undo_ftplugin .= " | sil! exe 'nunmap <buffer> [[' | sil! exe 'vunmap <buffer> [['" . 40 \ " | sil! exe 'nunmap <buffer> ]]' | sil! exe 'vunmap <buffer> ]]'" . 41 \ " | sil! exe 'nunmap <buffer> []' | sil! exe 'vunmap <buffer> []'" . 42 \ " | sil! exe 'nunmap <buffer> ][' | sil! exe 'vunmap <buffer> ]['" 43 endif 44 45 " TODO: line start anchors are almost certainly overly restrictive - allow 46 " after statement separators. Even in QuickBasic only block IF statements 47 " were required to be at the start of a line. 48 if exists("loaded_matchit") && !exists("b:match_words") 49 let b:match_ignorecase = 1 50 let b:match_words = 51 \ '\%(^\s*\)\@<=\<if\>.*\<then\>\s*\%($\|''\):\%(^\s*\)\@<=\<else\>:\%(^\s*\)\@<=\<elseif\>:\%(^\s*\)\@<=\<end\>\s\+\<if\>,' . 52 \ '\%(^\s*\)\@<=\<for\>:\%(^\s*\)\@<=\<next\>,' . 53 \ '\%(^\s*\)\@<=\<while\>:\%(^\s*\)\@<=\<wend\>,' . 54 \ '\%(^\s*\)\@<=\<do\>:\%(^\s*\)\@<=\<loop\>\s\+\<while\>,' . 55 \ '\%(^\s*\)\@<=\<select\>\s\+\<case\>:\%(^\s*\)\@<=\<case\>:\%(^\s*\)\@<=\<end\>\s\+\<select\>,' . 56 \ '\%(^\s*\)\@<=\<enum\>:\%(^\s*\)\@<=\<end\>\s\<enum\>,' . 57 \ '\%(^\s*\)\@<=\<with\>:\%(^\s*\)\@<=\<end\>\s\<with\>,' . 58 \ '\%(^\s*\)\@<=\%(\<\%(private\|public\)\>\s\+\)\=\<function\>\s\+\([^ \t(]\+\):\%(^\s*\)\@<=\<\1\>\s*=:\%(^\s*\)\@<=\<end\>\s\+\<function\>,' . 59 \ '\%(^\s*\)\@<=\%(\<\%(private\|public\)\>\s\+\)\=\<sub\>\s\+:\%(^\s*\)\@<=\<end\>\s\+\<sub\>' 60 let b:undo_ftplugin .= " | unlet! b:match_words b:match_ignorecase" 61 endif 62 63 if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") 64 let b:browsefilter = "Visual Basic Source Files (*.bas)\t*.bas\n" . 65 \ "Visual Basic Form Files (*.frm)\t*.frm\n" 66 if has("win32") 67 let b:browsefilter .= "All Files (*.*)\t*\n" 68 else 69 let b:browsefilter .= "All Files (*)\t*\n" 70 endif 71 let b:undo_ftplugin .= " | unlet! b:browsefilter" 72 endif 73 74 let &cpo = s:cpo_save 75 unlet s:cpo_save