From 87a26c5bf169bafbee837e2323f24cfb07e35250 Mon Sep 17 00:00:00 2001 From: Adam Stankiewicz Date: Tue, 21 Dec 2021 14:41:23 +0100 Subject: Update --- ftplugin/vb.vim | 82 +++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 54 insertions(+), 28 deletions(-) (limited to 'ftplugin/vb.vim') diff --git a/ftplugin/vb.vim b/ftplugin/vb.vim index 0b5763f2..36c2a9f1 100644 --- a/ftplugin/vb.vim +++ b/ftplugin/vb.vim @@ -3,46 +3,72 @@ if polyglot#init#is_disabled(expand(':p'), 'visual-basic', 'ftplugin/vb.v endif " Vim filetype plugin file -" Language: VisualBasic (ft=vb) -" Maintainer: Johannes Zellner -" Last Change: Thu, 22 Nov 2001 12:56:14 W. Europe Standard Time +" Language: Visual Basic (ft=vb) +" Maintainer: Doug Kearns +" Previous Maintainer: Johannes Zellner +" Last Change: 2021 Nov 17 -if exists("b:did_ftplugin") | finish | endif +if exists("b:did_ftplugin") + finish +endif let b:did_ftplugin = 1 -setlocal com=sr:'\ -,mb:'\ \ ,el:'\ \ ,:' +let s:cpo_save = &cpo +set cpo&vim + +setlocal comments=sr:'\ -,mb:'\ \ ,el:'\ \ ,:' +setlocal commentstring='\ %s +setlocal formatoptions-=t formatoptions+=croql + +let b:undo_ftplugin = "setlocal com< cms< fo<" " we need this wrapper, as call doesn't allow a count -fun! VbSearch(pattern, flags) +function! s:VbSearch(pattern, flags) let cnt = v:count1 while cnt > 0 call search(a:pattern, a:flags) let cnt = cnt - 1 endwhile -endfun +endfunction -let s:cpo_save = &cpo -set cpo&vim +if !exists("no_plugin_maps") && !exists("no_vb_maps") + nnoremap [[ call VbSearch('^\s*\%(\%(private\public\)\s\+\)\=\%(function\sub\)', 'sbW') + vnoremap [[ call VbSearch('^\s*\%(\%(private\public\)\s\+\)\=\%(function\sub\)', 'sbW') + nnoremap ]] call VbSearch('^\s*\%(\%(private\public\)\s\+\)\=\%(function\sub\)', 'sW') + vnoremap ]] call VbSearch('^\s*\%(\%(private\public\)\s\+\)\=\%(function\sub\)', 'sW') + nnoremap [] call VbSearch('^\s*end\s\+\%(function\sub\)', 'sbW') + vnoremap [] call VbSearch('^\s*end\s\+\%(function\sub\)', 'sbW') + nnoremap ][ call VbSearch('^\s*end\s\+\%(function\sub\)', 'sW') + vnoremap ][ call VbSearch('^\s*end\s\+\%(function\sub\)', 'sW') + let b:undo_ftplugin .= " | sil! exe 'nunmap [[' | sil! exe 'vunmap [['" . + \ " | sil! exe 'nunmap ]]' | sil! exe 'vunmap ]]'" . + \ " | sil! exe 'nunmap []' | sil! exe 'vunmap []'" . + \ " | sil! exe 'nunmap ][' | sil! exe 'vunmap ]['" +endif + +" TODO: line start anchors are almost certainly overly restrictive - allow +" after statement separators. Even in QuickBasic only block IF statements +" were required to be at the start of a line. +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_ignorecase = 1 + let b:match_words = + \ '\%(^\s*\)\@<=\.*\\s*\%($\|''\):\%(^\s*\)\@<=\:\%(^\s*\)\@<=\:\%(^\s*\)\@<=\\s\+\,' . + \ '\%(^\s*\)\@<=\:\%(^\s*\)\@<=\,' . + \ '\%(^\s*\)\@<=\:\%(^\s*\)\@<=\,' . + \ '\%(^\s*\)\@<=\:\%(^\s*\)\@<=\\s\+\,' . + \ '\%(^\s*\)\@<=\\s\+\:\%(^\s*\)\@<=\:\%(^\s*\)\@<=\\s\+\,' . + \ '\%(^\s*\)\@<=\:\%(^\s*\)\@<=\\s\,' . + \ '\%(^\s*\)\@<=\:\%(^\s*\)\@<=\\s\,' . + \ '\%(^\s*\)\@<=\%(\<\%(private\|public\)\>\s\+\)\=\\s\+\([^ \t(]\+\):\%(^\s*\)\@<=\<\1\>\s*=:\%(^\s*\)\@<=\\s\+\,' . + \ '\%(^\s*\)\@<=\%(\<\%(private\|public\)\>\s\+\)\=\\s\+:\%(^\s*\)\@<=\\s\+\' + let b:undo_ftplugin .= " | unlet! b:match_words b:match_ignorecase" +endif -" NOTE the double escaping \\| -nnoremap [[ :call VbSearch('^\s*\(\(private\|public\)\s\+\)\=\(function\\|sub\)', 'bW') -nnoremap ]] :call VbSearch('^\s*\(\(private\|public\)\s\+\)\=\(function\\|sub\)', 'W') -nnoremap [] :call VbSearch('^\s*\\s\+\(function\\|sub\)', 'bW') -nnoremap ][ :call VbSearch('^\s*\\s\+\(function\\|sub\)', 'W') - -" matchit support -if exists("loaded_matchit") - let b:match_ignorecase=1 - let b:match_words= - \ '\%(^\s*\)\@<=\.*\\s*$:\%(^\s*\)\@<=\:\%(^\s*\)\@<=\:\%(^\s*\)\@<=\\s\+\,' . - \ '\%(^\s*\)\@<=\:\%(^\s*\)\@<=\,' . - \ '\%(^\s*\)\@<=\:\%(^\s*\)\@<=\,' . - \ '\%(^\s*\)\@<=\:\%(^\s*\)\@<=\\s\+\,' . - \ '\%(^\s*\)\@<=\\s\+\:\%(^\s*\)\@<=\:\%(^\s*\)\@<=\\s\+\,' . - \ '\%(^\s*\)\@<=\:\%(^\s*\)\@<=\\s\,' . - \ '\%(^\s*\)\@<=\:\%(^\s*\)\@<=\\s\,' . - \ '\%(^\s*\)\@<=\%(\<\%(private\|public\)\>\s\+\)\=\\s\+\([^ \t(]\+\):\%(^\s*\)\@<=\<\1\>\s*=:\%(^\s*\)\@<=\\s\+\,' . - \ '\%(^\s*\)\@<=\%(\<\%(private\|public\)\>\s\+\)\=\\s\+:\%(^\s*\)\@<=\\s\+\' +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Visual Basic Source Files (*.bas)\t*.bas\n" . + \ "Visual Basic Form Files (*.frm)\t*.frm\n" . + \ "All Files (*.*)\t*.*\n" + let b:undo_ftplugin .= " | unlet! b:browsefilter" endif let &cpo = s:cpo_save -- cgit v1.2.3