web-dev-qa-db-fra.com

comment ajouter la prise en charge de c ++ 11 au plugin syntaxique vim?

J'utilise syntastic dans mon projet c ++ 11. Lorsque je modifie dans vim et que j'enregistre (: w) le plugin syntaxique me donne des erreurs sur chaque liste d'initialisation {} et pour chaque boucle qui sont clairement des fonctionnalités c ++ 11 qui manquent.

J'ai installé syntastic en utilisant pathogène.

Voici deux exemples de l'erreur que j'obtiens sur les listes d'initialisation et pour chaque boucle (les deux c ++ 11 qui se compilent bien):

error on initializer listserror on for each loop

53
Carneiro

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 .vimrc (malheureux, je souhaite 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 (qui est ce que mon projet utilise), j'ai ajouté les lignes suivantes à mon ~/.vimrc

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

cela fonctionne maintenant magnifiquement.

97
Carneiro

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

Vous pouvez définir le chemin d'accès aux fichiers g: syntastic_cpp_config_file et g: syntastic_c_config_file. La valeur par défaut est .syntastic_cpp_config pour C++. Placer le fichier à la racine du projet et les options du compilateur à l'intérieur (un pour chaque ligne)

pour détails

4
The_Ham

J'étais confronté au même problème et J'insiste pour traiter séparément c ++ 98 et c ++ 11 . ci-dessous est ma solution:

créer un fichier nommé gcc.vim sous bundle/syntastic/syntax_checkers/cpp11/ et copiez-les:

"============================================================================
"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:

cela rendra le vérificateur gcc disponible (vous voulez un autre vérificateur? vous pouvez faire les choses similaires que j'ai faites pour vous-même) pour les fichiers avec & filetype == 'cpp11' dans vim. comment rendre vos fichiers automatiquement reconnus en tant que type de fichier cpp11 dans vim? il suffit de créer un 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 la vérification de la syntaxe, mais également la mise en évidence de la syntaxe (si vous avez besoin de la mise en évidence de la syntaxe cpp11 support, ce plugin vim sera utile, mais pas parfait).

4
luochen1990

Si vous utilisez YouCompleteMe en plus de Syntastic, vous devez modifier votre fichier .ycm_extra_conf.py. Remplacez de manière spécifique "-Wc ++ 98-compat" par "-Wnoc ++ 98-compat".

Je n'ai pas eu à modifier moi-même les paramètres Syntastic, bien que cela puisse être dû au fait que j'utilise un fichier compile_commands.json.

via ici .

0
David C. Bishop

Si vous utilisez YouCompleteMe, vous devriez peut-être changer '.ycm_extra_conf.py'.seulement changer les indicateurs: (chemin du fichier ~/.vim/bundle/YouCompleteMe/troisième_partie/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/',
 ]
0
MulticsYin