comment append le support de c ++ 11 au plugin syntastic vim?

J’utilise de la syntaxe dans mon projet c ++ 11. Lorsque j’édite dans vim, et que je sauvegarde (: w) le plug-in syntastic me donne des erreurs sur chaque liste d’initialisateurs {} et pour chaque boucle qui sont clairement des caractéristiques c ++ 11 qui manquent.

J’ai installé de la syntastique en utilisant un agent pathogène.

Voici deux exemples d’erreur que j’obtiens sur les listes d’initialisation et pour chaque boucle (les deux c ++ 11 compilant très bien):

erreur sur les listes d'initialisationerreur sur chaque boucle

Il s’avère que le linter C ++ (vérificateur de syntaxe) de syntastic a de nombreuses options qui peuvent être définies sur votre fichier .vimrc (dommage, je souhaiterais qu’il soit spécifique au projet, comme la solution .clang_complete).

Pour activer les normes c ++ 11 et utiliser la bibliothèque libc ++ avec clang (ce que mon projet utilise), j’ai ajouté les lignes suivantes à mon ~ / .vimrc

 let g:syntastic_cpp_comstackr = 'clang++' let g:syntastic_cpp_comstackr_options = ' -std=c++11 -stdlib=libc++' 

ça marche maintenant magnifiquement.

Je faisais face au même problème et j’insiste pour traiter c ++ 98 et c ++ 11 séparément . ci-dessous est ma solution:

Créez un fichier nommé gcc.vim sous bundle / syntastic / syntax_checkers / cpp11 / et copiez-le:

 "============================================================================ "File: cpp11.vim "Description: Syntax checking plugin for syntastic.vim "Maintainer: Gregor Uhlenheuer  "License: This program is free software. It comes without any warranty, " to the extent permitted by applicable law. You can redissortingbute " 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_comstackr') let g:syntastic_cpp11_comstackr = executable('g++') ? 'g++' : 'clang++' endif if !exists('g:syntastic_cpp11_comstackr_options') let g:syntastic_cpp11_comstackr_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_comstackr)) 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: 

cela rendra le vérificateur gcc disponible (si vous voulez un autre vérificateur? vous pouvez faire les mêmes choses que moi) pour les fichiers avec & filetype == ‘cpp11’ dans vim. Comment rendre vos fichiers automatiquement reconnus en tant que type de fichier cpp11 dans vim? créez simplement le fichier nommé ext_detect.vim sous ~ / .vim / ftdetect / avec le contenu suivant:

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

de cette façon, vous pouvez traiter vos fichiers * .cpp en tant que norme c ++ 98 et * .cpp11 ou * .cppx en tant que norme c ++ 11 séparément, non seulement pour la vérification de la syntaxe, mais aussi pour la coloration syntaxique support, ce plugin vim sera utile, mais pas parfait).

Il a des options spécifiques au projet, comme la solution .clang_complete

Vous pouvez définir le chemin d’access aux fichiers g: syntastic_cpp_config_file et g: syntastic_c_config_file. La valeur par défaut est .syntastic_cpp_config pour C ++. Placez le fichier à la racine du projet et les options du compilateur qu’il contient (une pour chaque ligne)

pour plus de détails

Si vous utilisez YouCompleteMe en plus de Syntastic, vous devez changer votre fichier .ycm_extra_conf.py. Changer de façon distincte ‘-Wc ++ 98-compat’ en ‘-Wnoc ++ 98-compat’.

Je n’ai pas eu à modifier les parameters de Syntastic moi-même, bien que cela puisse être dû au fait que j’utilise un fichier comstack_commands.json.

via ici

Si vous utilisez YouCompleteMe, vous devriez peut-être changer les drapeaux “.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/', ]