问题在于您的设置被 Vim 的文件类型插件覆盖了。具体而言,问题出在 ftplugin/python.vim
文件中:
" As suggested by PEP8.
setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8
Python插件默认尝试使您的源代码符合PEP8规范,因此它正在调整制表位。您可能需要一些这些插件所提供的功能,但是您可能需要设置自己的自动命令来修复您不喜欢的任何内容。
有两种方法可以做到这一点。如果您有一个~/.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()
后面的代码片段允许您在after文件中使用
SetupPython
而不是
call SetupPython()
。
另一种方法是将所有内容保留在
.vimrc
中,但您可以使用
VimEnter
自动命令为python设置FileType自动命令以设置您的首选项。等到触发
VimEnter
时,所有其他插件都有足够的时间设置它们的自动命令,因此您的自动命令将被添加到列表的末尾。这使您能够在运行python插件的
FileType
自动命令之后运行并设置自己的设置。然而,这有点混乱,上述的
after/
机制是首选的方法。
值得一提的是,我将许多常见设置保存在一个
SetupSource()
函数中,以便从许多不同的
FileType
中调用。然后,我会让
SetupPython()
调用
SetupSource()
。这有助于使特定函数更加清晰,并减少一些重复。如果需要,可以查看我的vimfiles中的函数:
https://github.com/jszakmeister/vimfiles/blob/master/vimrc#L5328。
python.vim
可以通过设置以下内容关闭 PEP-8 风格:let g:python_recommended_style=0
。另请参见:https://github.com/sullyj3/vim-ftplugin-python/blob/73bf4ed079b50f6c7259f81e02b6cca42fdc4ca3/python.vim#L59 - Maarten