I'm a programmer which naturally means I hate performing repetitive tasks... Publishing [my Vim plug-ins] homepage quickly turned out to fall in this category; I'd keep making the same mistakes and having users e-mail me because I screwed up again and uploaded a broken release to [www.vim.org] vim-online. After a while this got embarrassing so I decided to solve this annoying problem once and for all.
Things started out small but as my existing Vim plug-ins mature and I publish
more Vim plug-ins to the world, the vim-tools
repository grows with me. It
now contains several Python modules which can be useful to other people (mostly
Vim plug-in developers) which is why I'm sharing it with the world.
The Python module html2vimdoc.py
converts [Markdown] md and HTML documents
to Vim help files.
- It can deal with complex HTML thanks to [BeautifulSoup] bs
- Automatically generates Vim help file tags for headings
- Generates table of contents from headings & tags
- Supports nested block structures like nested lists, preformatted blocks inside lists, etc.
- Compacts & expands list items based on average number of lines per list item
It has a command line interface but can also be used as a plain Python module.
The html2vimdoc.py
module has several dependencies, the easiest way to
install them is in a [Python virtual environment] virtualenv:
# Clone the repository
git clone https://github.com/xolox/vim-tools.git
cd vim-tools
# Create the virtual environment.
virtualenv html2vimdoc
# Install the dependencies.
html2vimdoc/bin/pip install -r requirements.txt
# Run the program.
html2vimdoc/bin/python ./html2vimdoc.py --help
I use this module to convert my Vim plug-in README.md
files and the Lua
lua, LPeg lpeg and [Lua/APR] lua-apr manuals to Vim's help file format.
Here's my workflow involving the documentation of my Vim plug-ins:
- I write the documentation of my Vim plug-ins in
README.md
files because [GitHub] gh renders such files as a "repository homepage". - A git pre-commit hook runs
html2vimdoc.py
to convertREADME.md
file to a Vim help file which is included in the commit. - When I push a new version of a plug-in to [GitHub] gh, it will trigger a
web hook which notifies my personal website. The latest version of
README.md
is fetched and used as the plug-in homepage on my website.
The Python module vimdoctool.py
extracts the public functions and related
comments (assumed to contain text in [Markdown] md format) from the Vim
scripts in and/or below the current working directory. The extracted
documentation is combined into one chunk of text and then this chunk of text is
embedded in the Markdown document given on the command line.
I use this module to publish the documentation of my vim-misc vim-misc scripts.
This module has a dependency on my [coloredlogs] cl module which is available on PyPi (the Python package index).
This program (written in Python) makes it easier for me to publish my Vim plug-ins on [GitHub] gh and [Vim Online] vim-online. It automates most of my release management, here's a short summary:
- Run as a git pre-commit hook:
- Make sure
doc/tags
is included in.gitignore
- Make sure the copyright in
README.md
is up to date - Run
vimdoctool.py
to update function documentation embedded inREADME.md
- Run
html2vimdoc.py
to update Vim help file based onREADME.md
- Make sure
- Run as a git post-commit hook:
- Make sure git tags are created for version bumps on the
master
branch
- Make sure git tags are created for version bumps on the
- Interactively, for one of two reasons:
- Publish the latest version of a Vim plug-in to [GitHub] gh and [Vim
Online] vim-online (
vim-plugin-manager -r
):- First this pushes the latest commits and tags to [GitHub] gh
- Then it checks what was the last release uploaded to [Vim Online] vim-online
- Based on the last uploaded release a change log is generated from the git history
- Vim is opened to approve the change log and allow changes to the contents
- The command
git archive
is used to generate a ZIP archive with a clean copy (no local changes) of the last commit - The approved change log and ZIP archive are combined into a new release which is posted to [Vim Online] vim-online using [Mechanize] mn
- Summarize the local changes in my Vim plug-in repositories
(
vim-plugin-manager -c
)
- Publish the latest version of a Vim plug-in to [GitHub] gh and [Vim
Online] vim-online (
It might be a bit specific to my workflow but you never know, someone might find it useful :-)
If you have questions, bug reports, suggestions, etc. the author can be contacted at peter@peterodding.com. The latest version is available at http://peterodding.com/code/vim/tools/ and http://github.com/xolox/vim-tools.
This software is licensed under the [MIT license] mit.
© 2013 Peter Odding <peter@peterodding.com>.
The html2vimdoc.py
module bundles soupselect.py
by Simon Willison. The
soupselect module is also licensed under the [MIT license] mit. You can find
the soupselect module on [GitHub] ss-gh and [Google Code] ss-gc.