【问题标题】:Vim indentation levels with parentheses and brackets带括号和方括号的 Vim 缩进级别
【发布时间】:2012-05-12 08:40:58
【问题描述】:

当我使用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 粘贴到某个地方吗?
  • 我的 ~/.vimrc 是 pastebin.ca/2149343 我的 ~/.vim/ftplugin/python.vim 中也有:setlocal sts=4 sw=4 expandtab
  • 虽然我的主要目的是让我的python代码正常工作,但我想知道导致右括号与封闭块放在相同缩进上的当前配置在哪里,如我想在全球范围内进行更改。

标签: python vim


【解决方案1】:

在 vim 中使用 this indent 脚本来缩进你的 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,
    }),               
  )

【讨论】:

  • 我认为根据您的代码,这种缩进样式很糟糕。如果你尽量不超过 80 个字符的行,你可能会因此得到大量的换行符。
  • @ThiefMaster,您可以选择在打开函数调用行时没有参数。我编辑了答案以添加示例。在这种情况下,参数是垂直对齐的,并在单个缩进之后开始。
  • 建议基本上是说params应该垂直对齐。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 2012-03-18
  • 2019-02-22
  • 2022-11-19
  • 2021-06-29
  • 2021-01-17
相关资源
最近更新 更多