psf/black

vim plugin: provide black-compatible `indentexpr`

已关闭

#3,151 创建于 2022年7月1日

 (3 条评论) (2 个反应) (0 位负责人)Python (2,693 个派生)batch import
C: vimS: acceptedT: enhancementhelp wanted

仓库指标

星标
 (41,258 个星标)
PR 合并指标
 (平均合并 7天 22小时) (30 天内合并 26 个 PR)

描述

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.

贡献者指南