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

标签 vim indentation

安装 Vundle 后,我的 vim 不再遵循我拥有的 expandtab 设置。我的选项卡被设置为 2 个空格,但现在在 python 文件中它不再这样做了。此行正在调用问题:

filetype plugin on

这条线有什么作用(vundle 要求)?另外,我能做些什么来确保我的设置得到遵守?

谢谢!

VIMRC:pastebin.com/tGmfCi78

最佳答案

问题是您的设置被作为 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()

后一位只允许您将函数调用为 SetupPython而不是 call SetupPython()在后文件中。

另一种方法是将所有内容保留在您的 .vimrc 中。 ,但您使用 VimEnter autocommand 为 python 设置 FileType 自动命令以设置您的首选项。等到 VimEnter被触发,所有其他插件将有时间设置它们的自动命令,因此您的将被添加到列表的末尾。这允许您在 python 插件的 FileType 之后运行自动命令并设置您自己的设置。不过这有点乱,after/上述机制是执行此操作的首选方式。

FWIW,我保留在 SetupSource() 中的许多常见设置从多个不同的函数中调用FileType s。那么我会有 SetupPython()调用 SetupSource() .这有助于保持特定功能更清晰并减少一些重复。如果有帮助,请在此处查看我的 vim 文件中的函数:https://github.com/jszakmeister/vimfiles/blob/master/vimrc#L5328

关于vim - 为什么vim不遵守python文件中的expandtab?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21073496/

相关文章:

vim - 本地安装的 VIM 语法未加载

vim - 将 Emacs/vim 高亮转换为 TextMate(用于 SublimeText)

vim - GVim 主题斜体切断字符

python - Vim 与 Python 3 : "Caught deadly signal ABRT glibc detected..." 一起崩溃

html - 如何缩进 <code> 元素?详细示例

python - Python 的 Vim 语法高亮 'else:'

objective-c - UITableViewCell 的图像没有缩进

javascript - 如何在 ACE 编辑器中设置缩进大小

c++ - 如何控制链式方法调用的 clang 格式缩进?

python - `pylint` : how do you enable errors for tabs or spaces indentation?