web-dev-qa-db-ja.com

syntastic vimプラグインにc ++ 11サポートを追加する方法は?

私はc ++ 11プロジェクトでsyntasticを使用しています。 vimで編集し、保存(:w)すると、syntasticプラグインにより、すべてのイニシャライザーリスト{}と、欠落しているc ++ 11機能である各ループでエラーが発生します。

病原体を使用してsyntasticをインストールしました。

ここに、初期化リストと各ループ(両方とも正常にコンパイルされるc ++ 11の両方)で取得しているエラーの2つの例を示します。

error on initializer listserror on for each loop

53
Carneiro

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++'

今ではうまく機能しています。

97
Carneiro

.clang_completeソリューションのようなプロジェクト固有のオプションがあります

ファイルg:syntastic_cpp_config_fileおよびg:syntastic_c_config_fileへのパスを設定できます。 C++のデフォルトは.syntastic_cpp_configです。プロジェクトのルートにファイルを配置し、その中にコンパイラオプション(各行に1つ)

詳細

4
The_Ham

私は同じ問題に直面しており、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プラグイン は便利ですが、完璧ではありません)。

4
luochen1990

Syntasticに加えてYouCompleteMeを使用している場合、.ycm_extra_conf.pyファイルを変更する必要があります。 '-Wc ++ 98-compat'を '-Wnoc ++ 98-compat'に変更します。

自分でSyntasticの設定を変更する必要はありませんでしたが、compile_commands.jsonファイルを使用しているためかもしれません。

via here

0
David C. Bishop

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/',
 ]
0
MulticsYin