Как установить энергию для не расположения с отступом содержания пространства имен в C++?
namespace < identifier >
{
< statement_list > // Unwanted indentation
}
Удивительно, 'cinoptions' не позволяет редактировать добавление отступа содержания пространства имен.
Я настроил vim, чтобы не делать отступы для пространства имен. Это соответствующие строки в моем vimrc:
autocmd Filetype cpp set shiftwidth=2
set cino=>2(0^-2g0h2
Честно говоря, я не помню, как интерпретировать оператор cino
, но : help cinoptions
должно помочь в его расшифровке. Одно предостережение: я думаю, что он настроен так, чтобы не использовать отступ при использовании такого формата:
namespace foo
{ // <- curly bracket on next line
...
против
namespace foo { // <- same line
Поскольку я помещаю фигурную скобку в следующую строку исключительно для пространств имен, она делает то, что я хочу, но может не работать, если вы используете этот стиль для объявлений других функций, для и т. д.
Я использую cpp.vim, который вдохновлен Google C++ Style Guide. Среди прочего, этот скрипт делает то, о чем вы спрашиваете.
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.