The ultimate Vim configuration: vimrc
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Amir fef069af24 Updated plugins 3 years ago
.circleci Fixed 4 years ago
indent Updated plugins 3 years ago
spec Updated plugins 3 years ago
.coveragerc Fixed 4 years ago
.dockerignore Fixed 4 years ago
.gitignore Fixed 4 years ago
CONTRIBUTING.rst Fixed 4 years ago
COPYING.txt Fixed 4 years ago
Dockerfile Fixed 4 years ago
Gemfile Fixed 4 years ago
Makefile Fixed 4 years ago
README.rst Fixed 4 years ago
docker-compose.yml Fixed 4 years ago



.. image::
.. image::

This small script modifies Vim_’s indentation behavior to comply with PEP8_ and my aesthetic preferences.
Most importantly::





Install the plugin using your favorite plugin manager / method, a few examples


Follow the instructions on installing Pathogen_ and then:

.. code-block:: shell-session

$ cd ~/.vim/bundle
$ git clone


Follow the instructions on installing Vundle_ and add the appropriate plugin line into your ``.vimrc``:

.. code-block:: vim

Plugin 'Vimjas/vim-python-pep8-indent'


Follow the instructions on installing NeoBundle_ and add the appropriate NeoBundle line into your ``.vimrc``:

.. code-block:: vim

NeoBundle 'Vimjas/vim-python-pep8-indent'



You can configure the initial indentation of multiline strings using ``g:python_pep8_indent_multiline_string`` (which can also be set per buffer).
This defaults to ``0``, which means that multiline strings are not indented.
``-1`` and positive values will be used as-is, where ``-1`` is a special value for Vim's ``indentexpr``, and will keep the existing indent (using Vim's ``autoindent`` setting).
``-2`` is meant to be used for strings that are wrapped with ``textwrap.dedent`` etc. It will add a level of indentation if the multiline string started in the previous line, without any content in it already::


With content already, it will be aligned to the opening parenthesis::

testdir.makeconftest("""def pytest_addoption(parser):

Existing indentation (including ``0``) in multiline strings will be kept, so this setting only applies to the indentation of new/empty lines.


Control closing bracket indentation with ``python_pep8_indent_hang_closing``, set globally or per buffer.

By default (set to ``0``), closing brackets line up with the opening line::

my_list = [
1, 2, 3,
4, 5, 6,
result = some_function_that_takes_arguments(
'a', 'b', 'c',
'd', 'e', 'f',

With ``python_pep8_indent_hang_closing = 1``, closing brackets line up with the items::

my_list = [
1, 2, 3,
4, 5, 6,
result = some_function_that_takes_arguments(
'a', 'b', 'c',
'd', 'e', 'f',


In case it is not working, please make sure your Vim is configured to load
indent files (``filetype indent on``).
This is typically the case when using a plugin manager, but check its docs.

Check ``:verbose set indentexpr?`` in a Python file, which should show
something like the following:

Last set from ~/…/plugged/vim-python-pep8-indent/indent/python.vim


Please note that Kirill Klenov’s python-mode_ ships its own version of this bundle.
Therefore, if you want to use this version specifically, you’ll have to disable python-mode’s using:

.. code-block:: vim

let g:pymode_indent = 0

License and Authorship

This script is based on one from Vim’s official `script repo`_ that was *not* originally written by me.
Unfortunately the indentation was off by one character in one case and the script hasn’t been updated since 2005.

Even more unfortunately, I wasn’t able to reach any of the original authors/maintainers:
**David Bustos** and **Eric Mc Sween**.

So I fixed the annoyance with the help of `Steve Losh`_ and am putting it out here so you don’t have to patch the original yourself.
The original patch is still available here_.

Over the time a lot more improvements have been contributed_ by `generous people`_.

I’d like to thank the original authors here for their work and release it hereby to the *Public Domain* (using the CC0_ licence) since I hope that would be in their spirit.
If anyone with a say in this objects, please let me_ know immediately.
Also, if someone is in contact with one of them, I would appreciate being introduced.

While my Vimscript_ skills are still feeble, I intend to maintain it for now.
This mainly means that I’ll triage through bugs and pull requests but won’t be fixing much myself.

.. _Vim:
.. _PEP8:
.. _`script repo`:
.. _`Steve Losh`:
.. _here:
.. _Neobundle:
.. _Pathogen:
.. _python-mode:
.. _`Vimscript`:
.. _vundle:
.. _me:
.. _CC0:
.. _contributed:
.. _`generous people`: