C++で名前空間のコンテンツをインデントしないようにvimを設定するには?
namespace < identifier >
{
< statement_list > // Unwanted indentation
}
驚いたことに、'cinoptions'は名前空間の内容のインデントを編集する方法を提供していません。
C++で名前空間のコンテンツをインデントしないようにvimを設定するには?
namespace < identifier >
{
< statement_list > // Unwanted indentation
}
驚いたことに、'cinoptions'は名前空間の内容のインデントを編集する方法を提供していません。
いつ導入されたかはわかりませんが、インストールしたバージョンのvim、v7.3.353には、cpp名前空間を明示的に処理するcinoオプションがあります。私は現在、例の値を使用しています:
cino=N-s
とに従って:help cinoptions-values
NN Indent inside C++ namespace N characters extra compared to a
normal block. (default 0).
cino= cino=N-s
namespace { namespace {
void function(); void function();
} }
namespace my namespace my
{ {
void function(); void function();
} }
OPが投稿したリンクはv7.3.162用です
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
); それ以外の場合は、Vim の組み込み cindent メカニズムの値を返します。
基本的に、プラグインからコードを盗み、名前空間に関連しないものをすべて取り除き、インデント関数の名前を に変更しましたIndentNamespace()
。これを ~/.vim/indent/cpp.vim として保存します。
多くの人が言及しているように、Google C++ スタイルは非常に優れています。clang-format
推奨プラグインよりも優れていると思われるものをインストールし、その上にvimプラグインをインストールすることをお勧めします。
sudo apt-get install clang-format
// or for older versions:
sudo apt-get install clang-format-3.6
brew install clang-format
お気に入りのプラグイン マネージャーを使用してインストールします。その他のオプションについては、プラグインのリンクを確認してください。デフォルトのスタイルは ですが、他google
にもllvm
あります。
コマンドのカスタム バージョンを使用している場合に必要になる可能性のあるオプションの 1 つは、
例:
let g:clang_format#command ="clang-format-3.6"
私はGoogleC ++スタイルガイドに触発されたcpp.vimを使用しています。とりわけ、そのスクリプトはあなたが求めていることを実行します。
名前空間に対してインデントしないようにvimを構成しました。これらは私のvimrcの関連する行です:
autocmd Filetype cpp set shiftwidth=2
set cino=>2(0^-2g0h2
cino
率直に言って、このステートメントを解釈する方法を覚えていませんが:help cinoptions
、解読には役立つはずです。1 つの注意点: 次のような形式を使用する場合、インデントしないように構成されていると思います。
namespace foo
{ // <- curly bracket on next line
...
対
namespace foo { // <- same line
名前空間専用に次の行に中括弧を置いたので、それは私が望むことを行いますが、そのスタイルを他の関数宣言、for などに使用すると機能しない可能性があります.