Update runtime files
diff --git a/runtime/ftplugin/basic.vim b/runtime/ftplugin/basic.vim
index a8f6b08..4399fbf 100644
--- a/runtime/ftplugin/basic.vim
+++ b/runtime/ftplugin/basic.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	BASIC (QuickBASIC 4.5)
 " Maintainer:	Doug Kearns <dougkearns@gmail.com>
-" Last Change:	2021 Mar 16
+" Last Change:	2022 Jun 22
 
 if exists("b:did_ftplugin")
   finish
@@ -15,6 +15,8 @@
 setlocal commentstring='\ %s
 setlocal formatoptions-=t formatoptions+=croql
 
+let b:undo_ftplugin = "setl fo< com< cms<"
+
 " TODO: support exit ... as middle matches?
 if exists("loaded_matchit") && !exists("b:match_words")
   let s:line_start	= '\%(^\s*\)\@<='
@@ -33,10 +35,11 @@
 		\     '\<while\>:\<wend\>,' ..
 		\     s:line_start .. 'if\%(.*\<then\s*\%($\|''\)\)\@=:\<\%(' .. s:line_start .. 'else\|elseif\)\>:\<end\s\+if\>,' ..
 		\     '\<lock\>:\<unlock\>'
-
   let b:match_skip = 'synIDattr(synID(line("."),col("."),1),"name") =~? "comment\\|string" || ' ..
 		\    'strpart(getline("."), 0, col(".") ) =~? "\\<exit\\s\\+"'
 
+  let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_skip b:match_words"
+
   unlet s:line_start s:not_end s:not_end_or_exit
 endif
 
@@ -44,12 +47,10 @@
   let b:browsefilter = "BASIC Source Files (*.bas)\t*.bas\n" ..
 		\      "BASIC Include Files (*.bi, *.bm)\t*.bi;*.bm\n" ..
 		\      "All Files (*.*)\t*.*\n"
+  let b:basic_set_browsefilter = 1
+  let b:undo_ftplugin ..= " | unlet! b:browsefilter b:basic_set_browsefilter"
 endif
 
-let b:undo_ftplugin = "setl fo< com< cms<" ..
-		\     " | unlet! b:match_ignorecase b:match_skip b:match_words" ..
-		\     " | unlet! b:browsefilter"
-
 let &cpo = s:cpo_save
 unlet s:cpo_save
 
diff --git a/runtime/ftplugin/fetchmail.vim b/runtime/ftplugin/fetchmail.vim
index 33bb417..032f661 100644
--- a/runtime/ftplugin/fetchmail.vim
+++ b/runtime/ftplugin/fetchmail.vim
@@ -1,19 +1,16 @@
 " Vim filetype plugin file
-" Language:             fetchmail(1) RC File
-" Previous Maintainer:  Nikolai Weibull <now@bitwi.se>
-" Latest Revision:      2008-07-09
+" Language:		fetchmail(1) RC File
+" Maintainer:		Doug Kearns <dougkearns@gmail.com>
+" Previous Maintainer:	Nikolai Weibull <now@bitwi.se>
+" Latest Revision:	2022 Jun 30
 
 if exists("b:did_ftplugin")
   finish
 endif
 let b:did_ftplugin = 1
 
-let s:cpo_save = &cpo
-set cpo&vim
+setlocal comments=:# commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
 
 let b:undo_ftplugin = "setl com< cms< fo<"
 
-setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
-
-let &cpo = s:cpo_save
-unlet s:cpo_save
diff --git a/runtime/ftplugin/freebasic.vim b/runtime/ftplugin/freebasic.vim
index 58c2b4c..1680e84 100644
--- a/runtime/ftplugin/freebasic.vim
+++ b/runtime/ftplugin/freebasic.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	FreeBASIC
 " Maintainer:	Doug Kearns <dougkearns@gmail.com>
-" Last Change:	2021 Mar 16
+" Last Change:	2022 Jun 24
 
 " Setup {{{1
 if exists("b:did_ftplugin")
@@ -21,7 +21,8 @@
 
 " Match words {{{1
 if exists("loaded_matchit")
-  let s:not_end = '\%(end\s\+\)\@<!'
+  let s:line_start = '\%(^\s*\)\@<='
+  let s:not_end    = '\%(end\s\+\)\@<!'
 
   let b:match_words ..= ','
 
@@ -49,17 +50,32 @@
   endif
 
   let b:match_words ..= s:not_end .. '\<enum\>:\<end\s\+enum\>,' ..
-		  \	'^#\s*\%(if\|ifdef\|ifndef\)\>:^#\s*\%(else\|elseif\)\>:^#\s*endif\>,' ..
-		  \	'^#\s*macro\>:^#\s*endmacro\>'
+		\     s:line_start .. '#\s*\%(if\|ifdef\|ifndef\)\>:' ..
+		\       s:line_start .. '#\s*\%(else\|elseif\)\>:' ..
+		\     s:line_start .. '#\s*endif\>,' ..
+		\     s:line_start .. '#\s*macro\>:' .. s:line_start .. '#\s*endmacro\>,' ..
+		\     "/':'/"
 
-  " skip "function = <retval>"
-  let b:match_skip ..= '|| strpart(getline("."), col(".") - 1) =~? "^\\<function\\s\\+="'
+  " skip "function = <retval>" and "continue { do | for | while }"
+  if s:dialect == "qb"
+    let s:continue = "__continue"
+  else
+    let s:continue = "continue"
+  endif
+  let b:match_skip ..= ' || strpart(getline("."), col(".") - 1) =~? "^\\<function\\s\\+="' ..
+		  \    ' || strpart(getline("."), 0, col(".") ) =~? "\\<' .. s:continue .. '\\s\\+"'
 
-  unlet s:not_end
+  unlet s:not_end s:line_start
+endif
+
+if (has("gui_win32") || has("gui_gtk")) && exists("b:basic_set_browsefilter")
+  let b:browsefilter = "FreeBASIC Source Files (*.bas)\t*.bas\n" ..
+		\      "FreeBASIC Header Files (*.bi)\t*.bi\n" ..
+		\      "All Files (*.*)\t*.*\n"
 endif
 
 " Cleanup {{{1
 let &cpo = s:cpo_save
-unlet s:cpo_save
+unlet s:cpo_save s:dialect
 
 " vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
diff --git a/runtime/ftplugin/vue.vim b/runtime/ftplugin/vue.vim
new file mode 100644
index 0000000..e883374
--- /dev/null
+++ b/runtime/ftplugin/vue.vim
@@ -0,0 +1,24 @@
+" Vim filetype plugin file
+" Language:	vue
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Copied from ftplugin/html.vim
+" Original thanks to Johannes Zellner and Benji Fisher.
+if exists("loaded_matchit")
+  let b:match_ignorecase = 1
+  let b:match_words = '<:>,'
+	\ .. '<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,'
+	\ .. '<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,'
+	\ .. '<\@<=\([^/][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>'
+endif
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
+unlet s:save_cpo