Adds new indent file based on Google C++ SCoding Style.
This commit is contained in:
parent
9b0440f958
commit
3dd8da3298
92
indent/cpp.vim
Normal file
92
indent/cpp.vim
Normal 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<"
|
||||
|
Loading…
Reference in New Issue
Block a user