关于python:如何让vim只在调用函数时为括号后的下一行插入4个空格(一个缩进级别)?

How to make vim only insert 4 spaces (one indent level) for the next line after bracket when calling a function?

键入括号并输入后,下一行将有8个空格缩进:

1
2
3
        print conn.generate_url(
                seconds,
                'GET',

而不是4:

1
2
3
        print conn.generate_url(
            seconds,
            'GET',

我的~/.vimrc:https://github.com/quantonganh/salt-states/blob/master/vim/vimrc.jinja2

我错过了什么?

这是我的插件列表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
├── ctrlp.vim
├── gundo.vim
├── jedi-vim
├── nerdtree
├── powerline
├── salt-vim
├── supertab
├── syntastic
├── ultisnips
├── vim-fugitive
├── vim-indent-guides
├── vim-surround
├── vim-yankstack
└── vundle

更新于4月12日星期六10:00:55 ICT 2014

我想知道:它是否遵循PEP8?

1
2
3
4
5
6
7
8
        print conn.generate_url(
                seconds,
                'GET',
                bucket,
                key,
                response_headers={
                    'response-content-type': 'application/octet-stream'
                })

Continuation lines should align wrapped elements either vertically
using Python's implicit line joining inside parentheses, brackets and
braces, or using a hanging indent. When using a hanging indent the
following considerations should be applied; there should be no
arguments on the first line and further indentation should be used to
clearly distinguish itself as a continuation line.

在一个函数中,我们将有一些东西可以区分连续的行,但这里只是一个print,它应该是4或8个空格吗?

什么是PEP8的E128:延续线缩进为视觉缩进?

更新于2014年4月12日星期四23:09:27 ICT 2014

看起来jedi-vim对Python的缩进没有任何作用。所以我的问题应该改为:

在定义函数时,在括号后面的下一行添加8个空格(2个缩进级别)是可以的:

1
2
3
4
5
# More indentation included to distinguish this from the rest.
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)

但我只想在调用它时添加4个空格(一个缩进级别):

1
2
3
4
# Extra indentation is not necessary.
foo = long_function_name(
    var_one, var_two,
    var_three, var_four)

我该怎么做?


正如你所提到的,PEP8关于缩进的章节建议在参数之前添加两个缩进级别而不是一个(当第一行没有时)以区别于其他级别。

但它还补充说,如果不需要额外的缩进,它就变成了可选的。 您的编辑决定添加它,但根据PEP8,您可以选择。