2010-03-02 115 views
69

我正在使用Vim並編輯Python腳本。Vim自動刪除Python註釋中的縮進

Autoindent在一般情況下工作得很好,但是當我開始一個新行並鍵入'#'來輸入註釋時,Vim將爲我排除這些內容。

例如,如果有

def foo(): 

和我按enter鍵,Vim會縮進正確

def foo(): 
    pass 

但是,如果不是打字pass,I型#,它會自動unindents

def foo(): 
# comment 

class Thing(): 
    def __init__(self): 
     pass 
# comment line gets unindented all the way 

我的.vimrc文件如下。任何人都知道這是爲什麼發生?

set tabstop=4 
set smartindent 
set shiftwidth=4 
set expandtab 
set backspace=indent,eol,start 
set scrolloff=3 
set statusline=%f%m%r%h%w\ [%Y\ %{&ff}]\ [%l/%L\ (%p%%)] 
set laststatus=2 
+0

對於搜索引擎:dedent,outdent。 – naught101 2014-04-09 01:11:11

回答

53

設置上使Vim的行爲像你描述的我,而用nosmartindent(這是我傾向於使用)smartindent它像你更喜歡它。

更新:從上smartindent文檔:

當輸入「#」作爲一個新行的第一個字符,縮進的 該行被刪除,「#」被放在第一柱。下一行將恢復縮進 。如果你不想要這個,使用映射:「:inoremap#X^H#」,其中^ H是用CTRL-V CTRL-H輸入的。 使用「>>」命令時,以'#'開頭的行不會右移 。

這似乎是它。


更新:可能不需要打擾以下...我會留在這裏爲附加的信息價值。 ;-)

如果設置nosmartindent沒有幫助,也許你可以使用:set命令 - 無參數 - 獲得的所有設置列表中的效果在你的Vim會話,然後將其粘貼的地方(上Pastie也許)。據我所知,還有一些影響自動縮進的選項。

+8

我很難用CTRL-V CTRL-H得到這個答案中提出的^ H,但是我發現'inoremap#X #'確實有效。 – Glenn 2012-04-03 13:04:57

17

儘管Michał的文章解釋了smartindent的功能,但您可以做得比只關閉它好很多。您可以根據自己的喜好進行更多的配置,或者更好地讓Vim爲您選擇更好的縮進。隨着你的vimrc,而不是其他縮進設置如下:

filetype indent on 

Vim會自動使用正確的縮進插件蟒蛇。這比僅僅不去除縮進#行更好 - 幾乎所有東西都應該正確縮進。

+3

Jefromi, 我不明白你的答案。 vim已經在選擇python縮進插件 - 問題在於插件發生了不合邏輯的縮進,完全消除了縮進。所以你提出的解決方案不能解決問題中所解釋的問題。 – 2010-03-02 11:42:18

+2

'smartindent'將導致行初始''''不管'filetype indent'是否被打開。所以,你必須設置'nosmartindent'來解決問題。 – 2010-03-02 13:07:38

+4

啊,對。我應該澄清:我的意思是使用filetype indent *而不是其他縮進設置。 – Cascabel 2010-03-02 17:00:33

5

你可以嘗試的選項只對Python文件:

autocmd BufRead *.py inoremap # X<c-h>#<space> 
1

對於一些未知原因上述行爲是由於我在cindent上造成的。把它關掉爲我固定。上述其他修復無一幫助。

+1

原因在於C代碼中的約定(cindent是爲什麼)是取代以'#'開頭的proprocessor指令。所以,這對C有幫助,但對Python來說卻是一個大問題。 – 2015-02-06 18:05:35