5

現在、VIM の C のインデント設定で次のように設定しています。

set cinoptions=l1

これにより、自動インデントがステートメントのインデントを自動的に処理できるcaseようになるため、次のタイプの配置が自動的に取得されます。

switch(intForSwitching) {
   case 1: {
      // Comment
      // More comments
      break;
   }
   case 2: {
      //Comment
      break;
   }
   default: {
      break;
   }
}

ただし、これは各ケース (ステートメントの後の) が中括弧で囲まれている場合にのみ機能します{}。ちょうどそのケースで新しい一時変数を宣言する必要がある場合にのみ、case ステートメントで中かっこを使用します。これは、新しいレベルのブロック スコープを導入するためです。したがって、次の例では、case ステートメントが実行するコードに合わせて配置されているため、望ましくないインデントが付けられています。

// This is what I get
switch(intForSwitching) {
   case 1: {
      // Comment
      // More comments
      break;
   }
   case 2:
   //Comment
   break;
   default:
   break;
}

// This is what I want
switch(intForSwitching) {
   case 1: {
      // Comment
      // More comments
      break;
   }
   case 2:
      //Comment
      break;
   default:
      break;
}

さらに、ifdefステートメントが機能しなくなりました。以前は、autoindent はすべてのプリプロセッサ ディレクティブを列 0 に揃えていました。つまり、次のようになります。

char c;
if (c) {
#ifdef TESTING
   printf("%c", c);
#endif
}

今、それは私が望まないコードに合わせます。すなわち:

char c;
if (c) {
   #ifdef TESTING
   printf("%c", c);
   #endif
}

中括弧を使用して個々のケースを囲む場合に既存の配置を保持し、中括弧を使用しない場合にも同様の配置を行う方法はありますか?

ありがとうございました。

4

1 に答える 1