runtime(misc): add support for bzip3 to tar, vimball and gzip plugins

fixes: #16751
closes: #16755

Signed-off-by: Jim Zhou <jimzhouzzy@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/autoload/vimball.vim b/runtime/autoload/vimball.vim
index 774b798..6456984 100644
--- a/runtime/autoload/vimball.vim
+++ b/runtime/autoload/vimball.vim
@@ -2,8 +2,10 @@
 " Maintainer: This runtime file is looking for a new maintainer.
 " Original Author:	Charles E. Campbell
 " Date:			Apr 11, 2016
-" Version:	37
+" Version:	37 (with modifications from the Vim Project)
 " GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
+"  Last Change:
+"   2025 Feb 28 by Vim Project: add support for bzip3 (#16755)
 " Copyright: (c) 2004-2011 by Charles E. Campbell
 "            The VIM LICENSE applies to Vimball.vim, and Vimball.txt
 "            (see |copyright|) except use "Vimball" instead of "Vim".
@@ -530,6 +532,26 @@
    exe "e ".escape(fname,' \')
    if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
 
+  elseif expand("%") =~ '.*\.bz3' && executable("bunzip3")
+   " handle *.bz3 with bunzip3
+   silent exe "!bunzip3 ".shellescape(a:fname)
+   if v:shell_error != 0
+	call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip3 may have failed with <".a:fname.">")
+   endif
+   let fname= substitute(a:fname,'\.bz3$','','')
+   exe "e ".escape(fname,' \')
+   if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
+
+  elseif expand("%") =~ '.*\.bz3' && executable("bzip3")
+   " handle *.bz3 with bzip3 -d
+   silent exe "!bzip3 -d ".shellescape(a:fname)
+   if v:shell_error != 0
+	call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip3 -d" may have failed with <'.a:fname.">")
+   endif
+   let fname= substitute(a:fname,'\.bz3$','','')
+   exe "e ".escape(fname,' \')
+   if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
+
   elseif expand("%") =~ '.*\.zip' && executable("unzip")
    " handle *.zip with unzip
    silent exe "!unzip ".shellescape(a:fname)