programing

syntastic vim 플러그인에 C ++ 11 지원을 추가하는 방법은 무엇입니까?

copyandpastes 2021. 1. 19. 08:19
반응형

syntastic vim 플러그인에 C ++ 11 지원을 추가하는 방법은 무엇입니까?


내 C ++ 11 프로젝트에서 syntastic을 사용하고 있습니다. 내가 vim에서 편집하고 저장할 때 (: w) syntastic 플러그인은 모든 이니셜 라이저 목록 {}과 명확하게 C ++ 11 기능이 누락 된 각 루프에 대해 오류를 제공합니다.

병원체를 사용하여 syntastic을 설치했습니다.

다음은 이니셜 라이저 목록과 각 루프에서 발생하는 오류의 두 가지 예입니다 (모두 잘 컴파일되는 C ++ 11).

이니셜 라이저 목록 오류 각 루프에 대한 오류


syntastic의 C ++ linter (구문 검사기)에는 .vimrc에 설정할 수있는 많은 옵션이 있습니다 (불행히도 .clang_complete 솔루션과 같이 프로젝트별로 지정 되었으면합니다).

c ++ 11 표준을 활성화하고 libc ++ 라이브러리를 clang (내 프로젝트에서 사용하는 것)과 함께 사용하려면 ~ / .vimrc에 다음 줄을 추가했습니다.

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

이제 아름답게 작동합니다.


나는 같은 문제에 직면하고 있었고 C ++ 98과 C ++ 11을 별도로 처리해야한다고 주장합니다 . 아래는 내 솔루션입니다.

bundle / syntastic / syntax_checkers / cpp11 / 아래에 gcc.vim 이라는 파일을 만들고 복사합니다.

"============================================================================
"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 파일 형식으로 자동 인식하는 방법은 무엇입니까? 다음 내용 으로 ~ / .vim / ftdetect / 아래에 ext_detect.vim 이라는 파일을 만듭니다 .

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


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


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

compile_commands.json 파일을 사용하고 있기 때문에 Syntastic 설정을 직접 변경할 필요가 없었습니다.

여기를 통해 .


YouCompleteMe를 사용하는 경우 '.ycm_extra_conf.py'를 변경해야합니다. 플래그 만 변경 :( 파일 경로 ~ / .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/',
 ]

참조 URL : https://stackoverflow.com/questions/18158772/how-to-add-c11-support-to-syntastic-vim-plugin

반응형