Adds new indent file based on Google C++ SCoding Style.

This commit is contained in:
falsycat 2021-09-15 15:40:45 +09:00
parent 9b0440f958
commit 3dd8da3298

92
indent/cpp.vim Normal file
View File

@ -0,0 +1,92 @@
" Vim indent file
" Language: C++
" Maintainer: Konstantin Lepa <konstantin.lepa@gmail.com>
" Last Change: 2010 May 20
" License: MIT
" Version: 1.1.0
"
" Changes {{{
" 1.1.0 2011-01-17
" Refactored source code.
" Some fixes.
"
" 1.0.1 2010-05-20
" Added some changes. Thanks to Eric Rannaud <eric.rannaud@gmail.com>
"
"}}}
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
function! GoogleCppIndent()
let l:cline_num = line('.')
let l:orig_indent = cindent(l:cline_num)
if l:orig_indent == 0 | return 0 | endif
let l:pline_num = prevnonblank(l:cline_num - 1)
let l:pline = getline(l:pline_num)
if l:pline =~# '^\s*template' | return l:pline_indent | endif
" TODO: I don't know to correct it:
" namespace test {
" void
" ....<-- invalid cindent pos
"
" void test() {
" }
"
" void
" <-- cindent pos
if l:orig_indent != &shiftwidth | return l:orig_indent | endif
let l:in_comment = 0
let l:pline_num = prevnonblank(l:cline_num - 1)
while l:pline_num > -1
let l:pline = getline(l:pline_num)
let l:pline_indent = indent(l:pline_num)
if l:in_comment == 0 && l:pline =~ '^.\{-}\(/\*.\{-}\)\@<!\*/'
let l:in_comment = 1
elseif l:in_comment == 1
if l:pline =~ '/\*\(.\{-}\*/\)\@!'
let l:in_comment = 0
endif
elseif l:pline_indent == 0
if l:pline !~# '\(#define\)\|\(^\s*//\)\|\(^\s*{\)'
if l:pline =~# '^\s*namespace.*'
return 0
else
return l:orig_indent
endif
elseif l:pline =~# '\\$'
return l:orig_indent
endif
else
return l:orig_indent
endif
let l:pline_num = prevnonblank(l:pline_num - 1)
endwhile
return l:orig_indent
endfunction
setlocal shiftwidth=2
setlocal tabstop=2
setlocal softtabstop=2
setlocal expandtab
setlocal textwidth=80
setlocal wrap
setlocal cindent
setlocal cinoptions=h1,l1,g1,t0,i4,+4,(0,w1,W4
setlocal indentexpr=GoogleCppIndent()
let b:undo_indent = "setl sw< ts< sts< et< tw< wrap< cin< cino< inde<"