Autres conseils

cpp.vim va résoudre votre problème, mais si vous ne « t veulent que le style de codage Google complet alors il suffit de prendre un coup d'oeil à la source de plug-in et voir comment il gère les espaces de noms. Il est super simple:

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()

Essentiellement tout ce que vous faites est correspondre à la dernière ligne non vide contre /^\s*namespace/, et si elle correspond à 0 retour (comme position tiret pour indentexpr); sinon retour builtin cindent valeur du mécanisme de Vim.

Je essentiellement volé le code du plug-in, quoi que ce soit dépouillé qui est l'espace de noms liés et renommé pas la fonction de retrait à IndentNamespace(). Enregistrer ce que ~ / .vim / indent / cpp.vim.

J'utilise cpp.vim qui est inspiré par Google C ++ Guide de style. Entre autres choses, ce script fait ce que vous demandez.

Comme beaucoup l'ont mentionné le style Google C ++ est assez bonne. Je d recommande d'installer clang-format que je trouve mieux que les plugins recommandés, puis installer un plugin vim sur le dessus.

Installer clang-format

Ubuntu:

sudo apt-get install clang-format
// or for older versions:
sudo apt-get install clang-format-3.6

Mac:

brew install clang-format

plug-in Vim:

rhysd / vim-clang format

Installation à l'aide de votre gestionnaire de plug-in favori. Passer la commande lien du plugin pour plus d'options. Le style par défaut est google, mais il est llvm aussi et d'autres.

Une option que vous pourriez avoir besoin si vous utilisez une version personnalisée de la commande est pour

exemple:

let g:clang_format#command ="clang-format-3.6"

J'ai configuré vim à ne pas tiret pour l'espace de noms. Ce sont les lignes pertinentes dans mon vimrc:

autocmd Filetype cpp set shiftwidth=2
set cino=>2(0^-2g0h2

Franchement, je ne me souviens pas comment Interpet la déclaration de cino, mais :help cinoptions devrait aider à déchiffrer. Une mise en garde: Je pense qu'il est configuré pour ne pas tiret lors de l'utilisation d'un format comme ceci:

namespace foo 
{ // <- curly bracket on next line
...

contre

namespace foo { // <- same line

Depuis que je mets la accolade sur la ligne suivante exclusivement pour les espaces de noms, il fait ce que je veux, mais il pourrait ne pas fonctionner si vous utilisez ce style pour d'autres déclarations de fonctions, pour, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top