如何将c ++ 11支持添加到syntim vim插件?

我在我的c + + 11项目中使用synthesis。 当我在vim中进行编辑时,保存(:w)合成插件会给每个初始化程序列表上的错误提供一个错误,而且每个循环显然都缺lessc ++ 11function。

我使用病原体安装了synthesis。

这里有两个例子,我得到的初始化列表和每个循环(都编译好的C + + 11)的错误:

初始化程序列表错误每个循环错误

原来C ++ linter(语法检查器)的syntastic有很多选项可以在你的.vimrc上设置(不幸的是,我希望它是项目特定的,就像.clang_complete解决scheme)。

为了启用c ++ 11标准并使用clang(这是我的项目使用的)libc ++库,我在〜/ .vimrc中添加了以下几行

 let g:syntastic_cpp_compiler = 'clang++' let g:syntastic_cpp_compiler_options = ' -std=c++11 -stdlib=libc++' 

它现在工作很好。

我面临同样的问题, 我坚持要分别处理c + + 98和c + + 11 。 下面是我的解决scheme:

bundle / syntastic / syntax_checkers / cpp11 /下创build一个名为gcc.vim的文件,并将其复制到它:

 "============================================================================ "File: cpp11.vim "Description: Syntax checking plugin for syntastic.vim "Maintainer: Gregor Uhlenheuer <kongo2002 at gmail dot com> "License: This program is free software. It comes without any warranty, " to the extent permitted by applicable law. You can redistribute " it and/or modify it under the terms of the Do What The Fuck You " Want To Public License, Version 2, as published by Sam Hocevar. " See http://sam.zoy.org/wtfpl/COPYING for more details. " "============================================================================ if exists('g:loaded_syntastic_cpp11_gcc_checker') finish endif let g:loaded_syntastic_cpp11_gcc_checker = 1 if !exists('g:syntastic_cpp11_compiler') let g:syntastic_cpp11_compiler = executable('g++') ? 'g++' : 'clang++' endif if !exists('g:syntastic_cpp11_compiler_options') let g:syntastic_cpp11_compiler_options = '-std=c++11' endif let s:save_cpo = &cpo set cpo&vim function! SyntaxCheckers_cpp11_gcc_IsAvailable() dict return executable(expand(g:syntastic_cpp11_compiler)) endfunction function! SyntaxCheckers_cpp11_gcc_GetLocList() dict return syntastic#c#GetLocList('cpp11', 'gcc', { \ 'errorformat': \ '%-G%f:%s:,' . \ '%f:%l:%c: %trror: %m,' . \ '%f:%l:%c: %tarning: %m,' . \ '%f:%l:%c: %m,'. \ '%f:%l: %trror: %m,'. \ '%f:%l: %tarning: %m,'. \ '%f:%l: %m', \ 'main_flags': '-x c++ -fsyntax-only', \ 'header_flags': '-x c++', \ 'header_names': '\m\.\(h\|hpp\|hh\)$' }) endfunction call g:SyntasticRegistry.CreateAndRegisterChecker({ \ 'filetype': 'cpp11', \ 'name': 'gcc' }) let &cpo = s:save_cpo unlet s:save_cpo " vim: set et sts=4 sw=4: 

这将使gcc检查器可用(需要其他检查器?你可以做类似的事情,我自己做)的文件与&filetype =='cpp11'在vim。 如何使你的文件在vim中自动识别为cpp11文件types? 只需在〜/ .vim / ftdetect /下创build名为ext_detect.vim的文件,内容如下:

 au bufnewfile,bufread *.cpp11 set ft=cpp11 au bufnewfile,bufread *.cppx set ft=cpp11 

通过这种方式,你可以将你的* .cpp文件分别作为c ++ 98标准和* .cpp11或* .cppx作为c ++ 11标准来处理,不仅仅是语法检查,还有语法高亮(如果你需要cpp11语法高亮支持, 这个VIM插件将是有用的,虽然不完美)。

它具有项目特定的选项,如.clang_complete解决scheme

您可以设置文件pathg:syntastic_cpp_config_file和g:syntastic_c_config_file。 C ++的缺省值是.syntastic_cpp_config。 把文件放在项目的根目录和编译器选项里面(每行一个)

了解详情

如果您在使用Syntastic之外使用YouCompleteMe,则需要更改.ycm_extra_conf.py文件。 Sepicifically将“-Wc ++ 98-compat”更改为“-Wnoc ++ 98-compat”。

我自己并不需要改变Syntastic设置,尽pipe这可能是因为我正在使用compile_commands.json文件。

通过这里 。

如果你使用YouCompleteMe,也许你应该改变'.ycm_extra_conf.py'。只是改变标志:(文件path〜/ .vim / bundle / YouCompleteMe / third_party / ycmd / cpp / ycm / .ycm_extra_conf.py);

  flags = [ '-std=c++11', '-O0', '-Werror', '-Weverything', '-Wno-documentation', '-Wno-deprecated-declarations', '-Wno-disabled-macro-expansion', '-Wno-float-equal', '-Wno-c++98-compat', '-Wno-c++98-compat-pedantic', '-Wno-global-constructors', '-Wno-exit-time-destructors', '-Wno-missing-prototypes', '-Wno-padded', '-Wno-old-style-cast', '-Wno-weak-vtables', '-x', 'c++', '-I', '.', '-isystem', '/usr/include/', ]