cpp.vim решит вашу проблему, но если вам не нужен полноценный стиль кодирования Google, просто взгляните на источник плагина и посмотрите, как он обрабатывает пространства имен. Это супер просто:
function! IndentNamespace()
let l:cline_num = line('.')
let l:pline_num = prevnonblank(l:cline_num - 1)
let l:pline = getline(l:pline_num)
let l:retv = cindent('.')
while l:pline =~# '\(^\s*{\s*\|^\s*//\|^\s*/\*\|\*/\s*$\)'
let l:pline_num = prevnonblank(l:pline_num - 1)
let l:pline = getline(l:pline_num)
endwhile
if l:pline =~# '^\s*namespace.*'
let l:retv = 0
endif
return l:retv
endfunction
setlocal indentexpr=IndentNamespace()
По сути, все, что вы делаете, это сопоставляет последнюю непустую строку с /^\s*namespace/
, и, если она соответствует, возвращает 0 (в качестве позиции отступа для indentexpr
); в противном случае возвращает значение встроенного механизма Cindent Vim.
По сути, я украл код из плагина, удалил все, что не связано с пространством имен, и переименовал функцию отступа в IndentNamespace()
. Сохраните это как ~ / .vim / indent / cpp.vim.