Vim Python缩进无效?

12

我在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个回答

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:

2

在你的vimrc中设置tabstop、shiftwidth等是正确的。这些设置会影响全局配置,并作为文件类型特定缩进支持的参数。

语言缩进插件使用这些设置,但通常也设置适用于该语言的缩进表达式(:he inde)。因此,Python缩进器应该在块开头语句(def、class、for...)后自动缩进,在关闭语句(return、pass、continue...)后自动减少缩进,并根据你设置的ts、sw等进行缩进。

如果你仍然不确定插件是否加载到缓冲区,请简单地执行:filetype以显示检测、插件和缩进设置,以及:set ft?以查看检测到的类型。


所以,总结一下,../indent/python.vim 文件不能为我设置 tabstop、shiftwidth 等等,所以它们必须在 vimrc 中指定?如果我想要根据文件类型设置不同的 tabstop 值会发生什么?我能否将这些 vimrc 设置放置在 indent/python.vim 文件中,以便它们只在 Python 文件中加载? - CarpeNoctem
你可以将这些设置添加到indent/python.vim中以获得该结果,但更好的方法是添加特定文件类型的设置作为autocmds,在缓冲区加载后运行。(:he au) - abeyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接