Vim中括号和方括号的缩进级别

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个字符宽。

我有一种隐隐的感觉,你在这里使用了一些cindent规则。 你在使用cindent吗? 你能否将你整个vimrc的内容上传到pastebin上? - Randy Morris
我的~/.vimrc是http://pastebin.ca/2149343我还在我的~/.vim/ftplugin/python.vim中有以下设置:setlocal sts=4 sw=4 expandtab - Shaun Bouckaert
虽然我的主要意图是让我的Python代码正常工作,但我想知道导致封闭括号与封闭块放置在同一缩进位置的当前配置位于何处,因为我希望全局更改此设置。 - Shaun Bouckaert
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,
    }),               
  )

1
我认为,根据你的代码,这种缩进风格很糟糕。如果你尽量避免超过80个字符的行,可能会出现大量的换行符。 - ThiefMaster
@ThiefMaster,你可以选择在打开函数调用行时不使用参数。我编辑了我的答案以添加一个例子。在这种情况下,参数垂直对齐,并在单个缩进后开始。 - Vikas
该建议基本上是说参数应该垂直对齐。 - Vikas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接