Vim 中 Python 缩进不工作?
我在CentOS 5上使用的是增强版的Vim 7,它自带了很多常用的Vim插件和脚本。
$ 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键就能输入四个空格,并且在写代码块、条件语句等时,下一行能自动缩进。
我现在是通过在我的.vimrc文件里明确设置tabstop、shiftwidth等参数来实现这个功能的。难道这不是处理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 个回答
我的理解是,python.vim 文件可能只是一个语法高亮文件,因为 Python 文件的缩进方式有很多种。PEP8 规定使用四个空格,但一些旧文件可能会用不同的方式,比如使用制表符(Tab)。
我们的一些旧 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:
在你的vimrc文件中设置tabstop、shiftwidth等是正确的。这些设置会影响全局的格式,同时也会作为特定文件类型的缩进支持参数。
语言的缩进插件会使用这些设置,但通常还会根据语言设置一个缩进表达式(:he inde
)。比如,Python的缩进工具应该会在打开一个代码块的语句后(比如def、class、for等)自动缩进,而在关闭语句后(比如return、pass、continue等)自动减少缩进,并且会根据你设置的ts、sw等来调整。
如果你还不确定插件是否在某个缓冲区中加载,可以输入:filetype
来查看检测到的类型、插件和缩进设置,输入:set ft?
可以查看检测到的文件类型。