8

当我使用重新缩进文件时,gg=G我注意到右括号或括号的缩进与开头的行不匹配。例如(使用 >... 显示的前导选项卡)

if settings.DEBUG:
>...urlpatterns += patterns('',
>...>...url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
>...>...>...'document_root': settings.MEDIA_ROOT,
>...>...}),
>...)

我想修复包含此文件的缩进。对于 python,我softtabstop设置为 4,shiftwidth设置为 4 并expandtab设置。当我这样做gg=G时,结果如下:

if settings.DEBUG:
    urlpatterns += patterns('',
            url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
                'document_root': settings.MEDIA_ROOT,
                }),
            )

我这里有两个问题。首先是右括号与其左括号的空白级别不匹配,它们缩进到与括号内的代码相同的级别。这(在第二行中的 和它)在最后一行中的匹配以及{ 第三行中的 和它}在第五行中的匹配中都可以看到。我希望它使右括号与它们的左括号匹配在同一级别。

我的第二个问题是左括号后的缩进是新块的缩进的两倍,甚至是开括号后的缩进{。我想这可能是 Python 文件类型缩进的一部分,但我想知道如何阻止它,所以所有缩进都是 4 宽。

4

1 回答 1

6

在 vim 中使用这个缩进脚本来缩进你的 python 文件。它执行PEP-0008中推荐的操作。您发布的代码与脚本缩进给了我这个:

if settings.DEBUG:
  urlpatterns += patterns('',
                          url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
                            'document_root': settings.MEDIA_ROOT,
                          }),
                         )

针对您的第二个问题的建议是:

续行应该使用 Python 的隐式行在括号、方括号和大括号内连接,或者使用悬挂缩进垂直对齐被包裹的元素。使用悬挂缩进时,应考虑以下事项;第一行不应该有任何参数,并且应该使用进一步的缩进来清楚地将自己区分为续行。

所以缩进脚本正在做正确的事情。

此外,如果您在第一行没有任何参数,建议您使用所需的缩进类型。所以重新排列代码并使用缩进脚本给出:

if settings.DEBUG:
  urlpatterns += patterns(
    '',
    url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
      'document_root': settings.MEDIA_ROOT,
    }),               
  )
于 2012-05-12T08:56:42.963 回答