[ C++で開発 ]

EmacsのC++インデント設定

Emacsのデフォルトのc++-modeは、gnuスタイル設定となっています。

インデント設定

インデント種類

基本インデント量 c-basic-offset
コメントのみの行 c-comment-only-line-offset
関数の括弧 同桁
void f()
{
}
制御構文の括弧 インデント
while (true)
  {
  }

組み込みスタイルのインデント設定

gnu k&r bsd stroustrup whitesmith ellemtel cc-mode
基本インデント量 2 5 TAB(8) 4 1 3 4

デフォルトのスタイルを変更するには以下の方法があります。

  1. ファイルを開いてから、毎回次のコマンドを実行する。
    M-x c-set-style RET stroustrup RET
  2. c++-modeのときはellemtelスタイルを使用するように、.emacsに記述する。
    ;; C++ style
    (add-hook 'c++-mode-hook
              '(lambda()
                 (c-set-style "ellemtel")))

インデント操作

インデントを実施させるのには、次の3つのモードがあります。

  1. 自動インデントなし
  2. 半自動インデント
  3. 全自動インデント

1.は、インデント量はすべてユーザが明示的に空白やTABコードを入れて行います。
2.は、[TAB]キーを押した場合にはその行が、[C-j]による改行を実施した場合には次の行がインデントされます。
3.は、中括弧、セミコロン、コロン、改行などを入力した時点でその行がインデントされ、さらに自動的に改行が挿入され、次の行のインデント位置にキャレットが移動します。

全自動インデントを指定する変数はc-auto-newlineです。

(setq c-auto-newline t)   ; 全自動インデントを有効
(setq c-auto-newline nil) ; 全自動インデントを無効

半自動インデントを指定する変数はc-tab-always-indentです。

(setq c-tab-always-indent t)   ; [TAB]キーでインデント実施
(setq c-tab-always-indent nil) ; [TAB] キーで、TABコードを入力

カスタマイズ例

;; C++ style
(add-hook 'c++-mode-hook
          '(lambda()
             (c-set-style "stroustrup")
             (setq indent-tabs-mode nil)     ; インデントは空白文字で行う(TABコードを空白に変換)
             (c-set-offset 'innamespace 0)   ; namespace {}の中はインデントしない
             (c-set-offset 'arglist-close 0) ; 関数の引数リストの閉じ括弧はインデントしない
             ))