vim Tabstop设置不生效

mes*_*ael 0 vim

更新:使用Ingo Karkat的疑难解答找到了一个解决方案,我可以通过:verbose sw?来识别设置被覆盖的地方。STS?由此,我可以~/.vim/after/ftplugin/python.vim使用自己的设置创建文件。最后,重新启动vim使更改生效,因为我的:source〜/ .vimrc努力不足以加载这些更改。在hinsight中,这可能是因为我的新设置不在vimrc中。无论哪种方式,公认的答案都是最终解决了我所遇到的问题的方法,并且生活可以如广告中所述继续进行。

我是vim的新用户,正在努力了解tabstops和softtabstop的工作方式。我做了一些阅读,然后决定要进行以下设置

set shiftwidth=2
set softtabstop=2
set tabstop=2
set expandtab
Run Code Online (Sandbox Code Playgroud)

我期望制表符为2个空格,但是当我将其添加到vimrc并提供资源时,.vimrc在python文件中执行gg = G不会应用我期望的更改,而是在缩进上放置4个空格。如果进入插入模式,我还将获得4个缩进空格。我是否不能完全设置这些设置?我以前有

autocmd FileType python set sw=4
autocmd FileType python set ts=4
autocmd FileType python set sts=4
Run Code Online (Sandbox Code Playgroud)

我在想,即使将其删除并重新加载vimrc之后,该设置仍在系统中。我尝试添加

autocmd FileType python sw=2 sts=2 ts=2 et
Run Code Online (Sandbox Code Playgroud)

但是,这不能解决我获得4个空间与2个空间的问题。我缺少什么?插件可能会覆盖这个吗?我在语法后面看了一下,但是里面只有一个html.vim。我有一些插件:Vundle,YouCompleteMe,taglist,ultisnips,syntastic,vim-surround

不知道是否有任何原因或如何进一步解决此问题。希望vim众神能在这里为我解救。

Ing*_*kat 5

Vim可以告诉您这些设置的最新设置:

:verbose setlocal ts? sts? et? sw?
Run Code Online (Sandbox Code Playgroud)

您的全局设置可能已被覆盖$VIMRUNTIME/ftplugin/python.vim。它具有以下代码(在最新的Vim 8.0中):

if !exists("g:python_recommended_style") || g:python_recommended_style != 0
    " As suggested by PEP8.
    setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8
endif
Run Code Online (Sandbox Code Playgroud)

如您所见,通过:let g:python_recommended_style = 0(例如在中~/.vimrc),您可以禁用该设置。由于许多用户抱怨此预设,因此可能已引入了这种有条件的防护措施。通常,文件类型插件不具备此功能,但是您始终可以通过after目录中的脚本覆盖设置:

:setlocal ts=...命令放入~/.vim/after/ftplugin/python.vim。另外,您可以:autocmd FileType python ...直接在中定义一个~/.vimrc,但是一旦您进行了许多自定义,这往往变得很笨拙。正如您所提到的,该功能:autocmd不适用于您,可能还会有其他自定义设置(:verbose setlocal应该告诉您)。在这种情况下,您需要根据所涉及的插件找到特殊的解决方案。

  • 谢谢你,这是一个巨大的帮助,那些 :verbose 命令确实将 /vim/vim80/ftplugin/python.vim 识别为罪魁祸首。我今天的时间不多了,因为我要到周一才会回来,到时候我会回复。但我确实尝试了你所有的建议,它还没有解决,但我非常希望使用你的建议我能解决问题。希望我今天有更多时间。非常感谢你。 (2认同)