Vim中C#文件按类型配置空格缩进失效求助
我碰到过类似的缩进失效问题,结合你的配置来看,大概率是插件(比如你安装的YouCompleteMe)自带的C#缩进配置覆盖了自定义设置,下面给你几个排查和解决的步骤:
1. 先确认文件类型是否正确识别
打开你的C#文件,在Vim命令行输入:
:set filetype?
确保输出是filetype=cs。如果不是,说明Vim没把这个文件识别为C#类型,需要检查文件扩展名是否为.cs(默认情况下Vim会识别.cs为C#类型)。
2. 排查插件覆盖问题
你安装了带--cs-completer的YouCompleteMe,这个插件自带了C#的文件类型配置,很可能会覆盖你自己的缩进设置。可以先临时注释掉.vimrc里的YCM插件行,重启Vim后测试缩进是否生效:
" 临时注释掉这行 " Plug 'Valloric/YouCompleteMe', { 'do': 'python install.py --cs-completer --clang-completer --java-completer' }
如果缩进生效了,那确定是YCM的配置在干扰。这时候最可靠的解决方法是用after/ftplugin目录来覆盖插件的设置:
创建~/.vim/after/ftplugin/cs.vim文件,写入以下配置(一定要用setlocal,确保只作用于C#文件,且优先级更高):
" ~/.vim/after/ftplugin/cs.vim setlocal expandtab setlocal shiftwidth=4 setlocal softtabstop=4 setlocal tabstop=4 " 额外加上这个,确保Tab键显示为4个空格宽度
after目录下的配置会在所有插件的ftplugin之后加载,所以能覆盖它们的默认设置。
3. 验证配置是否实际生效
打开C#文件后,在命令行输入:
:setlocal shiftwidth? softtabstop? expandtab?
查看输出是否为shiftwidth=4、softtabstop=4和expandtab(如果显示noexpandtab说明没生效)。如果还是不对,输入:scriptnames查看所有加载的脚本,找有没有其他cs.vim文件在你的配置之后加载,找到后调整加载顺序或者修改对应文件。
4. 备用方案:用高优先级自动命令
如果after目录的方法还是不行,可以在.vimrc里添加一个触发时机更晚的自动命令,确保覆盖所有其他设置:
autocmd BufEnter *.cs setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=4
BufEnter事件会在进入缓冲区时触发,比FileType事件晚,优先级更高。
5. 排除全局配置冲突
你的.vimrc里有全局的shiftwidth=8和softtabstop=8,不过因为你开启了filetype plugin indent on,正常情况下文件类型的局部设置会覆盖全局。但如果还是有问题,可以尝试把全局缩进配置移到filetype相关配置之前,确保加载顺序正确。
内容的提问来源于stack exchange,提问作者Dafta




