Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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 are clearly c++11 features that it's missing.

I installed syntastic using pathogen.

Here are two examples of the error I am getting on initializer lists and for each loops (both c++11 that compile fine):

error on initializer listserror on for each loop

like image 376
Carneiro Avatar asked Aug 10 '13 05:08

Carneiro


2 Answers

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.

like image 195
Carneiro Avatar answered Sep 21 '22 14:09

Carneiro


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).

like image 28
luochen1990 Avatar answered Sep 23 '22 14:09

luochen1990