2013-10-11 80 views
20

鍵入一個冒號(:)當每當在Vim中在Python模式追加一個:字符,它要麼:防止Vim的從縮進線在Python

  • 縮進線
  • dedents線
  • 什麼都不做

它甚至試圖做什麼,以及如何擺脫這種行爲?

+1

你爲什麼認爲它可能試圖縮進一行?如在中,':'字符用於表示函數或控制語句... – YXD

+2

你真的想要什麼樣的行爲? – aIKid

+0

這發生在我身上,但是我不小心在Ubuntu中從德語切換到US鍵盤。 – alex

回答

4

它試圖有幫助。如果你想關閉所有的自動縮進當前文件,

:setlocal noautoindent 
:setlocal nocindent 
:setlocal nosmartindent 
:setlocal indentexpr= 

或者,你可以在你的vimrc文件中添加設置。您也可以按文件類型執行這些操作。請參見here

18

某些按鍵在按下時會觸發Vim的縮進功能,該功能將嘗試在當前行上設置正確的縮進量。 (您可以通過在正常模式下鍵入==來手動觸發此操作。)

您可以更改哪些鍵觸發此行爲,但首先您需要知道正在使用哪種縮進模式。首先,執行:set indentexpr?。如果它是非空的(我預計這將用於Python),那麼將使用indentexpr模式。在這種情況下,執行:set indentkeys?會爲您提供觸發鍵列表。要刪除冒號,請執行:setlocal indentkeys-=:

如果indentexpr爲空,那麼您可能使用cindent模式,並且:set cindent?會告訴您cindent已設置。在這種情況下,請按照以前一樣進行,但使用cinkeys而不是indentkeys。 (請注意,indentexpr模式優先於cindent模式。)

+2

但是這不會在會話中持續存在,並且添加到'.vimrc'也無濟於事,因爲之後會加載Python的自定義設置。 –

+1

嘗試把它放在.vim/after/ftplugin/python.vim –

+0

對我來說,編輯一個python文件,':set indentkeys?'顯示出indentkeys = 0 {,0},!^ F,o,O,e, <:>,= elif,=除了'。查看冒號是如何指定的,大於和小於字符'<:>'。爲了得到這個在我的情況下工作,我不得不這樣做:':setlocal indentkeys- = <:>'。 –

5

Nathan Grigg's answer使我處於正確的軌道。我必須爲我的設置進行一些更改。

我不得不使用:setlocal indentkeys-=<:>,因爲在我的例子中:set indentkeys?顯示爲indentkeys=0{,0},!^F,o,O,e,<:>,=elif,=except

此外,將:setlocal indentkeys-=<:>置於.vim/after/ftplugin/python.vim未能使更改永久。我發現有一個內置的vim python indent文件,它在after-ftplugin文件後運行。

要進行診斷,請打開一個Python文件進行編輯,然後運行:scriptnames。這將按照優先順序向您顯示所有已運行的vim腳本的列表。該列表底部的腳本最近已應用,並且優先。有關更多信息,請參閱this question on SuperUser

當我這樣做時,它向我展示了一個內置的vim文件/my-install-path/vim/7.4.1830/share/vim/vim74/indent/python.vim。果然,這是設置<:>作爲縮進鍵的一部分。

爲了解決這個問題,我在.vimrc中設置了一個自動命令,這真的是最後一個詞。

autocmd FileType python setlocal indentkeys-=<:> 

更新

我畢竟加:setlocal indentkeys-=:。這就是我現在在我的.vimrc中所擁有的。

autocmd FileType python setlocal indentkeys-=<:> 
autocmd FileType python setlocal indentkeys-=: