私はc ++ 11プロジェクトでsyntasticを使用しています。 vimで編集し、保存(:w)すると、syntasticプラグインにより、すべてのイニシャライザーリスト{}と、欠落しているc ++ 11機能である各ループでエラーが発生します。
病原体を使用してsyntasticをインストールしました。
ここに、初期化リストと各ループ(両方とも正常にコンパイルされるc ++ 11の両方)で取得しているエラーの2つの例を示します。
SyntasticのC++リンター(構文チェッカー)には、.vimrcに設定できる多くのオプションがあります(残念ながら、.clang_completeソリューションのように、プロジェクト固有のものがあればいいのですが)。
C++ 11標準を有効にし、clangでlibc ++ライブラリを使用するには(プロジェクトで使用しているものです)、次の行を〜/ .vimrcに追加しました
let g:syntastic_cpp_compiler = 'clang++'
let g:syntastic_cpp_compiler_options = ' -std=c++11 -stdlib=libc++'
今ではうまく機能しています。
.clang_completeソリューションのようなプロジェクト固有のオプションがあります
ファイルg:syntastic_cpp_config_fileおよびg:syntastic_c_config_fileへのパスを設定できます。 C++のデフォルトは.syntastic_cpp_configです。プロジェクトのルートにファイルを配置し、その中にコンパイラオプション(各行に1つ)
私は同じ問題に直面しており、c ++ 98とc ++ 11を別々に処理することを主張しています。以下は私の解決策です:
gcc.vimという名前のファイルをbundle/syntastic/syntax_checkers/cpp11 /の下に作成し、これらにコピーします。
"============================================================================
"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:
これにより、vimで&filetype == 'cpp11'のファイルに対してgccチェッカーを使用できるようになります(他のチェッカーが必要ですか?あなたのファイルをvimのcpp11ファイルタイプとして自動的に認識させる方法は?次の内容でext_detect.vimという名前のファイルを〜/ .vim/ftdetect /の下に作成するだけです:
au bufnewfile,bufread *.cpp11 set ft=cpp11
au bufnewfile,bufread *.cppx set ft=cpp11
この方法により、*。cppファイルをc ++ 98標準として、*。cpp11または* .cppxをc ++ 11標準として個別に処理できます。構文チェックだけでなく、構文の強調表示(cpp11構文の強調表示が必要な場合)サポート、 このvimプラグイン は便利ですが、完璧ではありません)。
Syntasticに加えてYouCompleteMeを使用している場合、.ycm_extra_conf.pyファイルを変更する必要があります。 '-Wc ++ 98-compat'を '-Wnoc ++ 98-compat'に変更します。
自分でSyntasticの設定を変更する必要はありませんでしたが、compile_commands.jsonファイルを使用しているためかもしれません。
via here 。
YouCompleteMeを使用する場合は、「。ycm_extra_conf.py」を変更する必要があります。変更フラグのみ:(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/',
]