2012-05-12 145 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

相關問題