# Vim documentation: pi_vimball

main help file

    *pi_vimball.txt*	For Vim version 9.2.  Last change: 2026 Apr 16

    			       ----------------
    			       Vimball Archiver
    			       ----------------

    Author:  Charles E. Campbell  <NcampObell@SdrPchip.AorgM-NOSPAM>
    	  (remove NOSPAM from Campbell's email first)

    Copyright: (c) 2004-2015 by Charles E. Campbell		*Vimball-copyright*
    	The VIM LICENSE (see |copyright|) applies to the files in this
    	package, including vimballPlugin.vim, vimball.vim, and pi_vimball.txt.
    	except use "vimball" instead of "VIM".  Like anything else that's
    	free, vimball.vim and its associated files are provided *as is* and
    	comes with no warranty of any kind, either expressed or implied.  No
    	guarantees of merchantability.  No guarantees of suitability for any
    	purpose.  By using this plugin, you agree that in no event will the
    	copyright holder be liable for any damages resulting from the use of
    	this software. Use at your own risk!

    ==============================================================================

    1. Contents				*vba* *vimball* *vimball-contents*

    	1. Contents......................................: |vimball-contents|
    	2. Vimball Introduction..........................: |vimball-intro|
    	3. Vimball Manual................................: |vimball-manual|
    	   MkVimball.....................................: |:MkVimball|
    	   UseVimball....................................: |:UseVimball|
    	   RmVimball.....................................: |:RmVimball|
    	4. Vimball History...............................: |vimball-history|

    ==============================================================================

    2. Vimball Introduction						*vimball-intro*

    	Vimball is intended to make life simpler for users of plugins.  All
    	a user needs to do with a vimball is:
    		vim someplugin.vba
    		:so %
    		:q
     	and the plugin and all its components will be installed into their
    	appropriate directories.  Note that one doesn't need to be in any
    	particular directory when one does this.  Plus, any help for the
    	plugin will also be automatically installed.

    	If a user has decided to use the AsNeeded plugin, vimball is smart
    	enough to put scripts nominally intended for .vim/plugin/ into
    	.vim/AsNeeded/ instead.

    	Removing a plugin that was installed with vimball is really easy:
    		vim
    		:RmVimball someplugin
     	This operation is not at all easy for zips and tarballs, for example.

    	Vimball examines the user's 'runtimepath' to determine where to put
    	the scripts.  The first directory mentioned on the runtimepath is
    	usually used if possible.  Use
    		:echo &rtp
     	to see that directory.

    ==============================================================================

    3. Vimball Manual					*vimball-manual*

    MAKING A VIMBALL						*:MkVimball*
    		:[range]MkVimball[!] filename [path]

    	The range is composed of lines holding paths to files to be included
    	in your new vimball, omitting the portion of the paths that is
    	normally specified by the runtimepath ('rtp').  As an example:
    		plugin/something.vim
    		doc/something.txt
     	using
    		:[range]MkVimball filename

    	on this range of lines will create a file called "filename.vba" which
    	can be used by Vimball.vim to re-create these files.  If the
    	"filename.vba" file already exists, then MkVimball will issue a
    	warning and not create the file.  Note that these paths are relative
    	to your .vim (vimfiles) directory, and the files should be in that
    	directory.  The vimball plugin normally uses the first 'runtimepath'
    	directory that exists as a prefix; don't use absolute paths, unless
    	the user has specified such a path.

    	If you use the exclamation point (!), then MkVimball will create the
    	"filename.vba" file, overwriting it if it already exists.  This
    	behavior resembles that for |:w|.

    	If you wish to force slashes into the filename, that can also be done
    	by using the exclamation mark (ie. :MkVimball! path/filename).

     The tip at	http://vim.wikia.com/wiki/Using_VimBall_with_%27Make%27
    	has a good idea on how to automate the production of vimballs using
    	make.

    CONTROLLING THE VIMBALL EXTRACTION DIRECTORY		*g:vimball_home*

    	You may override the use of the 'runtimepath' by specifying a
    	variable, g:vimball_home.

    							*vimball-extract*
    		vim filename.vba

    	Simply editing a Vimball will cause Vimball.vim to tell the user to
    	source the file to extract its contents.

    	Extraction will only proceed if the first line of a putative vimball
    	file holds the "Vimball Archiver by Charles E. Campbell" line.

    LISTING FILES IN A VIMBALL					*:VimballList*

    		:VimballList

    	This command will tell Vimball to list the files in the archive, along
    	with their lengths in lines.

    MANUALLY INVOKING VIMBALL EXTRACTION				*:UseVimball*

    		:UseVimball [path]

    	This command is contained within the vimball itself; it invokes the
    	vimball#Vimball() routine which is responsible for unpacking the
    	vimball.  One may choose to execute it by hand instead of sourcing
    	the vimball; one may also choose to specify a path for the
    	installation, thereby overriding the automatic choice of the first
    	existing directory on the 'runtimepath'.

    REMOVING A VIMBALL						*:RmVimball*

    		:RmVimball vimballfile [path]

    	This command removes all files generated by the specified vimball
    	(but not any directories it may have made).  One may choose a path
    	for de-installation, too (see 'runtimepath'); otherwise, the default
    	is the first existing directory on the 'runtimepath'.
    	To implement this, a file (.VimballRecord) is made in that directory
    	containing a record of what files need to be removed for all vimballs
    	used thus far.

    PREVENTING LOADING

    	If for some reason you don't want to be able to extract plugins
    	using vimballs: you may prevent the loading of vimball.vim by
    	putting the following two variables in your <.vimrc>:

    		let g:loaded_vimballPlugin= 1
    		let g:loaded_vimball      = 1

    WINDOWS							*vimball-windows*

    	Many vimball files are compressed with gzip.  Windows, unfortunately,
    	does not come provided with a tool to decompress gzip'ped files.
    	Fortunately, there are a number of tools available for Windows users
    	to un-gzip files:

    	    Item     Tool/Suite   Free   Website
    	    ----     ----------   ----   -------
    	    7zip        tool       y     http://www.7-zip.org/
    	    Winzip      tool       n     http://www.winzip.com/downwz.htm
    	    unxutils    suite      y     http://unxutils.sourceforge.net/
    	    cygwin      suite      y     http://www.cygwin.com/
    	    GnuWin32    suite      y     http://gnuwin32.sourceforge.net/
    	    MinGW       suite      y     http://www.mingw.org/

    ==============================================================================

    4. Vimball History					*vimball-history* {{{1

    	unreleased:
    	     Feb 28, 2025 * add support for bzip3 (#16755)
    	     Apr 05, 2026 * Detect path traversal attacks
    	     Apr 09, 2026 * Detect more path traversal attacks
    	     Apr 16, 2026 * Block Windows drive letter paths
    	37 : Jul 18, 2014 * (by request of T. Miedema) added augroup around
    			    the autocmds in vimballPlugin.vim
    	     Jul 06, 2015 * there are two uses of tabc; changed to tabc!
    	34 : Sep 22, 2011 * "UseVimball path" now supports a non-full path by
    			    prepending the current directory to it.
    	33 : Apr 02, 2011 * Gave priority to *.vmb over *.vba
    			  * Changed silent! to sil! (shorter)
    			  * Safed 'swf' setting (during vimball extraction,
    			    its now turned off)
    	32 : May 19, 2010 * (Christian Brabrandt) :so someplugin.vba and
    			    :so someplugin.vba.gz (and the other supported
    			    compression types) now works
    			  * (Jan Steffens) added support for xz compression
    			  * fenc extraction was erroneously picking up the
    			    end of the line number when no file encoding
    			    was present.  Fixed.
    			  * By request, beginning the switchover from the vba
    			    extension to vmb.  Currently both are supported;
    			    MkVimball, however, now will create *.vmb files.
    	     Feb 11, 2011 * motoyakurotsu reported an error with vimball's
    			    handling of zero-length files
    	     Feb 18, 2016 * Changed =~ to =~# where appropriate
    	30 : Dec 08, 2008 * fnameescape() inserted to protect error
    			    messaging using corrupted filenames from
    			    causing problems
    			  * RmVimball supports filenames that would
    			    otherwise be considered to have "magic"
    			    characters (ie. Abc[1].vba)
    	     Feb 18, 2009 * s:Escape(), g:vimball_shq, and g:netrw_shq
    			    removed (shellescape() used directly)
    	     Oct 05, 2009 * (Nikolai Weibull) suggested that MkVimball
    			    be allowed to use slashes in the filename.
    	26 : May 27, 2008 * g:vimball_mkdir usage installed.  Makes the
    	                    $HOME/.vim (or $HOME\vimfiles) directory if
    			    necessary.
    	     May 30, 2008 * (tnx to Bill McCarthy) found and fixed a bug:
    			    vimball wasn't updating plugins to AsNeeded/
    			    when it should
    	25 : Mar 24, 2008 * changed vimball#Vimball() to recognize doc/*.??x
    			    files as help files, too.
    	     Apr 18, 2008 * RmVimball command is now protected by saving and
    	                    restoring settings -- in particular, acd was
    			    causing problems as reported by Zhang Shuhan
    	24 : Nov 15, 2007 * g:vimball_path_escape used by s:Path() to
    	                    prevent certain characters from causing trouble
    			    (defunct: |fnameescape()| and |shellescape()|
    			    now used instead)
    	22 : Mar 21, 2007 * uses setlocal instead of set during BufEnter
    	21 : Nov 27, 2006 * (tnx to Bill McCarthy) vimball had a header
    	                    handling problem and it now changes \s to /s
    	20 : Nov 20, 2006 * substitute() calls have all had the 'e' flag
    	                    removed.
    	18 : Aug 01, 2006 * vimballs now use folding to easily display their
    	                    contents.
    			  * if a user has AsNeeded/somefile, then vimball
    			    will extract plugin/somefile to the AsNeeded/
    			    directory
    	17 : Jun 28, 2006 * changes all \s to /s internally for Windows
    	16 : Jun 15, 2006 * A. Mechelynck's idea to allow users to specify
    			    installation root paths implemented for
    			    UseVimball, MkVimball, and RmVimball.
    			  * RmVimball implemented
    	15 : Jun 13, 2006 * bugfix
    	14 : May 26, 2006 * bugfixes
    	13 : May 01, 2006 * exists("&acd") used to determine if the acd
    			    option exists
    	12 : May 01, 2006 * bugfix - the 'acd' option is not always defined
    	11 : Apr 27, 2006 * VimballList would create missing subdirectories
    			    that the vimball specified were needed.  Fixed.
    	10 : Apr 27, 2006 * moved all setting saving/restoration to a pair of
    			    functions.  Included some more settings in them
    			    which frequently cause trouble.
    	9  : Apr 26, 2006 * various changes to support Windows' predilection
    			    for backslashes and spaces in file and directory
    			    names.
    	7  : Apr 25, 2006 * bypasses foldenable
    			  * uses more exe and less norm! (:yank :put etc)
    			  * does better at insuring a "Press ENTER" prompt
    			    appears to keep its messages visible
    	4  : Mar 31, 2006 * BufReadPost seems to fire twice; BufReadEnter
    			    only fires once, so the "Source this file..."
    			    message is now issued only once.
    	3  : Mar 20, 2006 * removed query, now requires sourcing to be
    			    extracted (:so %).  Message to that effect
    			    included.
    			  * :VimballList  now shows files that would be
    			    extracted.
    	2  : Mar 20, 2006 * query, :UseVimball included
    	1  : Mar 20, 2006 * initial release

    ==============================================================================
    top - main help file