2010-01-06 114 views
11

我在CentOS 5上有Vim 7(增強版),它配備了所有常用的Vim插件/腳本。Vim Python縮進不起作用?

$ find /usr/share/vim/vim70/ -name \*python\* 
/usr/share/vim/vim70/syntax/python.vim 
/usr/share/vim/vim70/ftplugin/python.vim 
/usr/share/vim/vim70/indent/python.vim 
/usr/share/vim/vim70/autoload/pythoncomplete.vim 

我認爲在開放的.py(vim file.py)結尾的文件時,它會自動加載這些插件,但我不知道是這種情況。我想要的是:

TAB並接收四個空格。自動縮進套房,條件等下一行

我有這個工作,明確設置tabstop,shiftwidth等在我的.vimrc文件。這不是以上Python文件的用途嗎?爲什麼我必須在我的.vimrc中設置這些東西?我如何從Vim插件獲取這些功能?

當前的.vimrc:

syntax on 
set hls 
set expandtab 
set textwidth=0 
set tabstop=4 
set softtabstop=4 
set shiftwidth=4 
set autoindent 
set backspace=indent,eol,start 
set incsearch 
set ignorecase 
set ruler 
set wildmenu 
set smarttab 
filetype indent on 
filetype on 
filetype plugin on 

回答

2

設置已製表位,shiftwidth的,等等......你的vimrc是正確的。這些設置您的全局設置,並作爲文件類型特定的縮進支持的參數。

語言縮進插件使用這些設置,但通常還會設置適合該語言的縮進表達式(:he inde)。因此,Python壓頭應該在塊打開語句(def,class,for ...)後自動縮進,並且在關閉之後(返回,通過,繼續...)縮進並根據ts,sw, ...你已經定了。

如果您仍然不確定該插件是否加載緩衝區,只需執行:filetype以顯示檢測,插件和縮進設置,然後:set ft?即可查看檢測到的類型。

+0

因此,總結../indent/python.vim文件是不是能夠爲我設置tabstop,shiftwidth等...所以他們必須在vimrc中指定?如果我希望tabstop因文件類型而異,會發生什麼情況?我可以將這些vimrc設置放在indent/python.vim文件中,以便只將它們加載到python文件中? – CarpeNoctem 2010-01-06 09:09:17

+0

您可以將這些設置添加到indent/python.vim並獲取該結果,但更好的方法是將文件類型特定的設置添加爲將在加載緩衝區後運行的autocmds。 (:他au) – abeyer 2010-01-06 10:09:47

5

我的理解是,python.vim文件可能只是一個語法高亮文件,因爲Python文件可以多種方式縮進。 PEP8規定了四個空格,但傳統文件可能不同,包括使用製表符。

我們的一些傳統Python文件實際上每個縮進使用兩個空格。因此,我將Python縮進Vim,並根據文件和文件類型對其進行配置。 .vimrc中的以下行給出了Python特有的設置,這些設置不同於說我的xml,xhtml和html(兩個空格)。

au FileType python setl shiftwidth=4 tabstop=4 

您可以通過文件與modeline如果你有舊文件這是很方便也設置特定的設置。

# vi: set tabstop=2 expandtab textwidth=70 filetype=python: