how to add c++11 support to syntastic vim plugin?

前端 未结 5 731
抹茶落季
抹茶落季 2020-12-23 02:18

I am using syntastic in my c++11 project. When I am editing in vim, and save (:w) the syntastic plugin gives me errors on every initializer list {} and for each loops which

相关标签:
5条回答
  • 2020-12-23 02:27

    If you use YouCompleteMe,maybe you should change '.ycm_extra_conf.py'.only change flags:(file 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/',
     ]
    
    0 讨论(0)
  • 2020-12-23 02:32

    If your using YouCompleteMe in addition to Syntastic you need to change your .ycm_extra_conf.py file. Sepcifically change '-Wc++98-compat' to '-Wnoc++98-compat'.

    I didn't have to change the Syntastic settings myself, although that might be because I'm using a compile_commands.json file.

    via here.

    0 讨论(0)
  • 2020-12-23 02:37

    Turns out the C++ linter (syntax checker) of syntastic has many options that can be set on your .vimrc (unfortunate, I wish it was project specific, like the .clang_complete solution).

    To enable c++11 standards and use the libc++ library with clang (which is what my project is using) I added the following lines to my ~/.vimrc

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

    it now works beautifully.

    0 讨论(0)
  • 2020-12-23 02:39

    It has project specific options, like the .clang_complete solution

    You can set path to files g:syntastic_cpp_config_file and g:syntastic_c_config_file. The default is .syntastic_cpp_config for C++. Put file in root of the project and compiler options inside it (one for each line)

    for details

    0 讨论(0)
  • 2020-12-23 02:44

    I was facing the same problem and I insist to process c++98 and c++11 separately. below is my solution:

    create file named gcc.vim under bundle/syntastic/syntax_checkers/cpp11/ and copy these to it:

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

    that will make gcc checker available (want other checker? you can do the similar things i did for yourself) for files with &filetype == 'cpp11' in vim. how to make your files automatically recongnized as cpp11 filetype in vim? just create file named ext_detect.vim under ~/.vim/ftdetect/ with the following content:

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

    by this way, you can process your *.cpp files as c++98 standard and *.cpp11 or *.cppx as c++11 standard separately, not only syntax checking, but also syntax highlighting (if you need cpp11 syntax highlighting support, this vim plugin will be useful, although not perfect).

    0 讨论(0)
提交回复
热议问题