为什么vim不遵守python文件中的expandtab?

为什么vim不遵守python文件中的expandtab?,vim,indentation,Vim,Indentation,安装Vundle后,我的vim不再遵守我的expandtab设置。我的制表符设置为2个空格,但现在在python文件中它不再这样做了。此行正在调用此问题: filetype plugin on 该行的功能是什么(vundle需要它)?此外,我可以做些什么来确保遵守我的设置 谢谢 VIMRC:覆盖设置 可能是这些设置被特定于语言的设置覆盖。有关更多信息,请参阅: 快速入门的方法是将所有特定于语言的内容从.vimrc文件移到名为.vim/ftplugin/language.vim的文件中(或Win

安装Vundle后,我的vim不再遵守我的expandtab设置。我的制表符设置为2个空格,但现在在python文件中它不再这样做了。此行正在调用此问题:

filetype plugin on
该行的功能是什么(vundle需要它)?此外,我可以做些什么来确保遵守我的设置

谢谢


VIMRC:

覆盖设置

可能是这些设置被特定于语言的设置覆盖。有关更多信息,请参阅:

快速入门的方法是将所有特定于语言的内容从.vimrc文件移到名为.vim/ftplugin/language.vim的文件中(或Windows上的$HOME/vimfiles/ftplugin/language.vim)

在这些位置检查python特定的
.vim
文件

打开文件类型

Vundle似乎需要关闭
文件类型
,我不确定您是否应该重新打开它。for Vundle上有一个线程解释了为什么需要
上的
文件类型。也许这将提供一些见解

我还认为在
上缩进
文件类型插件,然后在
上缩进
文件类型是不必要的。根据,前者打开检测、插件和缩进,后者打开检测并保持插件和缩进不变:

Overview:                   *:filetype-overview*

command                     detection       plugin          indent

:filetype on                on              unchanged       unchanged
:filetype off               off             unchanged       unchanged
:filetype plugin on         on              on              unchanged
:filetype plugin off        unchanged       off             unchanged
:filetype indent on         on              unchanged       on
:filetype indent off        unchanged       unchanged       off
:filetype plugin indent on  on              on              on
:filetype plugin indent off unchanged       off             off

问题是您的设置被Vim中的文件类型插件覆盖。问题在于:

python插件试图将您的源代码默认设置为与PEP8兼容,因此它正在调整tabstop。你会想要这些插件提供的一些功能,但是你可能需要设置自己的自动命令来修复任何你不喜欢的东西

有两种方法可以做到这一点。如果您有一个
~/.vim
文件夹,最简单的方法是添加文件
~/.vim/after/ftplugin/python.vim

" Here, you can set the setting directly, or call a command or function
" to help you.  We'll call a command, and then implement that command in
" your top-level vimrc to help keep things in one place.
SetupPython
.vimrc
中,添加:

function! SetupPython()
    " Here, you can have the final say on what is set.  So
    " fixup any settings you don't like.
    setlocal softtabstop=2
    setlocal tabstop=2
    setlocal shiftwidth=2
endfunction
command! -bar SetupPython call SetupPython()
后一位只允许您以
SetupPython
的形式调用函数,而不是在after文件中调用
callsetuppython()

另一种方法是将所有内容保存在
.vimrc
中,但您可以使用
vimcenter
自动命令为python设置文件类型自动命令来设置首选项。通过等待直到触发
VimEnter
,所有其他插件都将有时间设置其自动命令,因此您的将被添加到列表的末尾。这允许您在python插件的
FileType
autocommand之后运行,并设置您自己的设置。不过这有点乱,上面的
after/
机制是实现这一点的首选方法


FWIW,我在
SetupSource()
函数中保留了许多常用设置,可以从许多不同的
文件类型调用这些设置。然后我需要调用
SetupPython()
调用
SetupSource()
。这有助于保持特定功能的整洁并减少一些重复。如果有帮助,请在此处查看我的vimrc文件中的函数:

这是我的vimrc:。我没有什么特别的东西。知道怎么回事吗?通常最好编辑你的问题,将.vimrc的内容包括在内。这仍然是一个链接。我说内容。原因是pastebin可能不会一直存在。:)那似乎太过分了,你不觉得吗?它有60行内容,使得浏览网页变得很困难。您应该包括内容。我建议使用setlocal而不是set来实现ftplugins。请注意,最新版本的
python.vim
允许您通过设置来关闭PEP-8样式:
let g:python\u recommended\u style=0
。另请参见:JFTR python.vim set tabstop=8当我总是使用tabstop=4时,您是否有理由不想将setlocal调用放在/python.vim之后,而不是调用另一个文件中的函数?@Seth问得好。在我的例子中,vimfiles是由许多个人共享的,因此重写一个函数并最终得到您想要的更容易。否则,就没有优势。
function! SetupPython()
    " Here, you can have the final say on what is set.  So
    " fixup any settings you don't like.
    setlocal softtabstop=2
    setlocal tabstop=2
    setlocal shiftwidth=2
endfunction
command! -bar SetupPython call SetupPython()