Repository navigation
Description
The way that vim automatically indents python code1 differs from the black format. I'm aware of two differences: (i) lines within parentheses/braces are indented twice rather than once and (ii) closing parentheses/braces are not dedented. These differences can be seen clearly by looking at a function argument list that spans multiple lines. Here is such a list as it is automatically formatted by vim (i.e. typed without hitting tab or backspace):
# $ vim -u /etc/vimrc +'filetype indent on' +'set ft=python'
def foo(
a,
b,
c,
):
pass
Here is the same argument list as it would be formatted by black (ignoring that it would be condensed onto a single line):
def foo(
a,
b,
c,
):
pass
Multiline list/dict/set comprehensions have the same behavior.
I personally find it annoying that the code I type does not immediately conform to the black style. As such, I think it'd be nice if the vim plugin provided by this repository included an indentexpr that implemented the black indentation rules.
Is there any interest in having something like this? I have some experience writing vim plugins, so I might be able to contribute something, but probably not in the near future.
Alternatively, is there an easy way to get vim to do what I want without having to write a bunch of vimscript code? A brief search didn't turn up any existing plugins or relevant vimrc settings, but this feels like it should be a common desire and I'm half-convinced that I'm missing something simple.
Footnotes
-
As specified by
/usr/share/vim/vim82/indent/python.vim. ↩
Activity
ichard26 commentedon Jul 1, 2022
I would love to see such a configuration sample in the docs. I don't think anyone in the core team can actually write vimscript or anything similar though so we would be dependent on external contributions.
kalekundert commentedon Jul 1, 2022
Alright, I'm glad there's some interest. I might make a PR if I ever get some time, but if anyone else is interested in working on this, don't let me stop you.
aus-hawk commentedon Sep 18, 2022
vim-python-pep8-indent is a single file plugin that gets the job done. Should it be recommended to Vim users in the docs or should it just be added to the Black plugin itself?
tomatotomata commentedon Aug 2, 2026
I was thinking of taking the documentation path mentioned here: add a short Vim note recommending
vim-python-pep8-indentfor insert-mode indentation that matches Black, while keeping Black as the formatter. That keeps the integration small and avoids duplicating a Vimscript indentation engine in this repository. Let me know what you think.