Как избежать добавления отступа содержания пространства имен в энергии?

Как установить энергию для не расположения с отступом содержания пространства имен в C++?

namespace < identifier >
{
    < statement_list > // Unwanted indentation
}

Удивительно, 'cinoptions' не позволяет редактировать добавление отступа содержания пространства имен.

29
задан freitass 31 March 2010 в 00:05
поделиться

3 ответа

Я настроил 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

Поскольку я помещаю фигурную скобку в следующую строку исключительно для пространств имен, она делает то, что я хочу, но может не работать, если вы используете этот стиль для объявлений других функций, для и т. д.

0
ответ дан 28 November 2019 в 01:43
поделиться

Я использую cpp.vim, который вдохновлен Google C++ Style Guide. Среди прочего, этот скрипт делает то, о чем вы спрашиваете.

1
ответ дан 28 November 2019 в 01:43
поделиться

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.

11
ответ дан 28 November 2019 в 01:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: