Tôi đang đối mặt với cùng một vấn đề và Tôi nhấn mạnh để xử lý C++ 98 và C++ 11 riêng biệt. dưới đây là giải pháp của tôi:
tạo các tập tin có tên gcc.vim dưới bó/syntastic/syntax_checkers/cpp11/ và sao chép những với nó:
"============================================================================
"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:
mà sẽ làm cho kiểm tra gcc sẵn (muốn khác kiểm tra? bạn có thể làm những điều tương tự tôi đã làm cho chính mình) cho các tập tin với & filetype == 'cpp11' trong vim. làm thế nào để làm cho các tập tin của bạn tự động recongnized như cpp11 filetype trong vim? chỉ cần tạo file có tên ext_detect.vim dưới ~/.vim/ftdetect/ với các nội dung sau đây:
au bufnewfile,bufread *.cpp11 set ft=cpp11
au bufnewfile,bufread *.cppx set ft=cpp11
bằng cách này, bạn có thể xử lý các tập tin * .cpp của bạn như C++ 98 tiêu chuẩn và * .cpp11 hoặc * .cppx là tiêu chuẩn C++ 11 riêng biệt, không chỉ kiểm tra cú pháp, mà còn làm nổi bật cú pháp (nếu bạn cần hỗ trợ tô sáng cú pháp cpp11, this vim plugin sẽ hữu ích, mặc dù không hoàn hảo).
Đầu ra của lệnh ': echo b: clang_user_options' từ bộ đệm thuộc dự án là gì? Nếu giả định của bạn là chính xác, sẽ không có chuỗi con '-std = C++'. – xaizek
Đầu ra của ': echo b: clang_user_options' là' -I/usr/include -std = C++ 11 -stdlib = libC++ '. Vì vậy, tôi không hiểu tại sao tôi nhận được các lỗi liên quan đến các danh sách khởi tạo và cho mỗi vòng lặp. Tôi sẽ thêm một lỗi ví dụ vào bài đăng chính. – Carneiro
Chỉ ra điều này là ** không ** clang_complete, đây là cú pháp. Tôi sẽ cập nhật bài đăng và câu trả lời. – Carneiro