psf/black

vim plugin: provide black-compatible `indentexpr`

Open

#3 151 ouverte le 1 juil. 2022

Voir sur GitHub
 (3 commentaires) (2 réactions) (0 assignés)Python (2 693 forks)batch import
C: vimS: acceptedT: enhancementhelp wanted

Métriques du dépôt

Stars
 (41 258 stars)
Métriques de merge PR
 (Merge moyen 8j 13h) (33 PRs mergées en 30 j)

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

  1. As specified by /usr/share/vim/vim82/indent/python.vim.

Guide contributeur