2012-05-12 103 views
4

当我使用gg=G重新注册文件时,我注意到右括号或括号的缩进与开始行的缩进不匹配。例如(由> ...显示前导制表符)带圆括号和括号的Vim缩进级别

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。

+0

我有一个偷偷摸摸的怀疑,你有一些cindent规则在这里和你一起玩。你在用cindent吗?你可以将你的整个vimrc粘贴到某个地方吗? –

+0

我的〜/ .vimrc是http://pastebin.ca/2149343 我也有我的〜/ vim的/文件类型插件/ python.vim: 'SETLOCAL STS = 4 SW = 4 expandtab' –

+0

尽管我的本意主要是为了让我的python代码正常工作,我想知道在哪里导致右括号与封闭块放在同一个缩进的当前配置,因为我想在全局范围内进行更改。 –

回答

6

使用this在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, 
    }),    
) 
+0

我认为这取决于你的代码这种缩进风格是可怕的。如果您尝试不超过80个字符的行数,则可能会因此而导致大量换行符。 – ThiefMaster

+0

@ThiefMaster,您可以选择在开放函数调用行上没有参数。我编辑了我的答案以添加示例。在这种情况下,参数是垂直对齐的,并在单个缩进后开始。 – Vikas

+0

该建议基本上说,参数应该垂直对齐。 – Vikas

相关问题