Nvim缩进配置在C/C++类语言生效但Python用默认设置如何解决
coc-python 插件默认遵循 PEP8 规范,打开 .py 文件时会自动将缩进参数修改为4空格,直接覆盖init.vim里的全局缩进配置,这就是C/C++类文件缩进正常、Python文件始终加载默认设置的核心原因,和COC核心框架、jedi语言服务本身无关。
你当前的全局缩进配置本身没有问题:
set tabstop=2 shiftwidth=2 expandtab set smarttab set autoindent
两类文件缩进表现差异参考:
两种方案二选一即可,优先推荐第一种。
方案1:修改coc-python配置,直接指定Python缩进规则
普通模式下输入:CocConfig打开COC用户配置文件,在原有配置基础上新增以下字段:{ // 你已有的其他COC配置保持不变,新增以下内容 "python.indentation.size": 2, "coc.preferences.formatOnType": false }如果你不需要coc-python提供的自动格式化功能,可以额外加一行
"python.formatting.provider": "none",彻底避免格式化操作篡改缩进;如果需要保留自动格式化,记得同步将你使用的格式化工具(black/yapf/autopep8)的缩进参数也设置为2空格,否则格式化时仍会回退到PEP8要求的4空格规则。
保存配置后重启Nvim即可生效。方案2:通过ftplugin设置高优先级专属缩进
如果方案1不生效(通常是因为你同时安装了vim-polyglot、python-mode这类自带Python缩进规则的插件),可以用Neovim的after目录配置做兜底,这个目录下的文件类型配置会在所有插件加载完成后执行,优先级最高:- 进入你的Neovim配置目录,创建
after/ftplugin/路径 - 在该目录下新建
python.vim文件,写入Python专属缩进配置,注意使用setlocal保证配置仅对Python文件生效,不影响其他类型文件:
setlocal tabstop=2 setlocal shiftwidth=2 setlocal expandtab setlocal smarttab setlocal autoindent- 进入你的Neovim配置目录,创建
重启Nvim打开Python文件,普通模式下分别输入:set tabstop?、:set shiftwidth?、:set expandtab?,如果返回值依次为tabstop=2、shiftwidth=2、expandtab,说明配置已经正常生效。
内容的提问来源于stack exchange,提问作者paxous

