psf/black

vim plugin: provide black-compatible `indentexpr`

Open

#3,151 建立於 2022年7月1日

在 GitHub 查看
 (3 留言) (2 反應) (0 負責人)Python (41,258 star) (2,693 fork)batch import
C: vimS: acceptedT: enhancementhelp wanted

描述

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.

貢獻者指南