2017-01-31 10 views
0

現在、インデントスタイルが少し特殊な新しいプロジェクトに投げ込まれています。基本的な規則は、 'keyword + blank'スペースを使用して次の行をインデントすることです。例えばvim用のカスタム 'smartindent'スクリプト

if() { 
    // indent 3 spaces here 
} 

while() { 
     // indent 6 spaces here 
} 

ありexeptionsの一部(またはロット):他に

  • 場合:スペースの同じ番号を使用するかのように、スイッチの(3)
  • 場合/ケース(2つのスペース)
  • ...

1)Iそこに私のためにそれをすることができるプラグインがすでに利用可能ですか?開発者の一人によると、これは「スマートな識別」と呼ばれています。残念ながら、VIMのsmartindentは何か違うことをします。

2)答えが1の場合、いいえです。これらのルールを守るためにvimを設定する簡単な方法はありますか?

+0

[ファイルタイプ別にVimインデントの動作を変更する](http://stackoverflow.com/questions/158968/changing-vim-indentation-behavior-by-file-type?rq = 1)は、[autotab](http://www.kylheku.com/cgit/c-snippets/tree/autotab.c)というプラグインの使用を示唆しています。あなたが望む字下げ規則に従っている既存のファイルを持っていれば便利ですが、 –

+0

ありがとうございますが、これはうまくいくとは思いません。 vimが提供するtabstopなどのパラメータの情報は、私が記述したインデントスタイルを保持できません。 –

答えて

1

私はそのようなプラグインは認識していません。IMHOはスマート以外のものです。

ただし、正確な要件を実装したカスタムインデントプラグインを書くことは完全に可能です。 :help 'indentexpr'を参照してください。また、Vimには、インスピレーションの役目を果たすことができる$VIMRUNTIME/indent/*.vimのいくつかのインデントプラグインが同梱されています。

基本的には、アルゴリズムは次のようになります:

  • チェックキーワード(ifwhileなど)のいずれかの前の行。
  • 一致する場合は、オフセットを計算し、前の行のインデント(indent(v:lnum - 1))に追加します。それ以外の場合は、直前の行のインデントをそのまま使用します。
  • 行が一致{の行を見つけ、}が含まれており、その行からインデントを使用している場合。
関連する問題