Vim Syntastic显示C++警告、设置级别及多语言配置问询
Hey,我之前用Syntastic写C的时候也踩过这个坑——只报错误看不到警告,切换C标准的时候还经常出不一致的检查结果。折腾了好一阵摸清楚了配置逻辑,给你一步步讲怎么解决:
一、让Syntastic显示警告信息
默认情况下Syntastic可能只关注编译错误,要让它把警告也拉出来,得先开两个全局配置:
" 始终填充位置列表(包含警告和错误) let g:syntastic_always_populate_loc_list = 1 " 自动打开位置列表 let g:syntastic_auto_loc_list = 1
光开这个还不够,关键是要给C++检查器加上警告相关的编译参数——因为Syntastic本质是调用编译器做检查,你不给警告选项,它自然不会输出警告。
二、配置警告级别、C++版本和编译参数
Syntastic对C默认用g做检查器,你可以直接在配置里指定编译选项,完全和终端里敲g++的参数一致:
" 指定C++编译器(默认就是g++,可以省略,但明确写出来更清晰) let g:syntastic_cpp_compiler = 'g++' " 设置编译参数:警告级别+C++标准 let g:syntastic_cpp_compiler_options = '-Wall -Wextra -std=c++17'
这里解释下常用参数:
-Wall:开启基础警告(比如未初始化变量、隐式类型转换等)-Wextra:开启额外警告(比如无用的变量、返回值未使用等)-std=c++XX:指定C++标准,比如c++11、c++14、c++20,切换的时候改这个值就行- 如果想要更严格的检查,可以加
-Werror把警告当成错误,或者-Wpedantic强制符合标准语法
要是你需要针对不同项目用不同配置,也可以在项目根目录下建.vimrc.local,里面写项目专属的编译参数,Syntastic会自动识别。
三、切换到其他语言的配置方法
Syntastic支持绝大多数主流语言,核心逻辑都是「指定检查器 + 设置检查器参数」,举几个常用例子:
Python(用flake8做检查)
" 指定检查器为flake8 let g:syntastic_python_checkers = ['flake8'] " 设置flake8参数:比如最大行宽、忽略特定警告 let g:syntastic_python_flake8_args = '--max-line-length=120 --ignore=E501,W293'
JavaScript(用eslint做检查)
" 指定检查器为eslint let g:syntastic_javascript_checkers = ['eslint'] " 传递eslint配置(比如指定配置文件路径) let g:syntastic_javascript_eslint_args = '-c ~/.eslintrc.js'
通用逻辑
不管什么语言,先查一下Syntastic支持的检查器(比如:SyntasticInfo命令可以看当前文件可用的检查器),然后用g:syntastic_<lang>_checkers指定检查器,再用g:syntastic_<lang>_<checker>_args或者g:syntastic_<lang>_compiler_options(编译型语言)设置参数就行。
最后别忘了保存.vimrc后重启Vim,或者用:source ~/.vimrc让配置生效。
内容的提问来源于stack exchange,提问作者dekuShrub
相关产品推荐
相关产品推荐

