いまさらeditorconfig
Emacsでeditorconfigを使いたい
やりたいこと
- C++のコードに対して
- インデントをスペース×4
- タブ使わない
- 行の最後にある空白除去(trailing whitespace)
editorconfig導入
以下のサイトを参考にさせてもらった
EditorConfig を Emacs から使う - 雑文発散(2014-01-04)
$ sudo apt-get install editorconfig
なんかexec-path-from-shellがうまく動かないので使っていない。
;; editorconfig (unless (package-installed-p 'editorconfig) (package-refresh-contents) (package-install 'editorconfig)) (editorconfig-mode 1) (setq edconf-exec-path "/usr/bin/editorconfig")
- .editorconfig
# EditorConfig is awesome: https://EditorConfig.org # top-most EditorConfig file root = true # Unix-style newlines with a newline ending every file [*] end_of_line = lf insert_final_newline = true # Matches multiple files with brace expansion notation # Set default charset [*.{cpp,hpp,h}] charset = utf-8 indent_style = space indent_size = 4 trim_trailing_whitespace = true
これで、Emacsの設定が空でもやりたいことは実現できた。
Emacsのインデントが気に入らない件
今更だがc++-modeのそのままのスタイルが気に入らない。
// こうなってほしいのに Func( a, a ); // こうなる Func( a, a );
- いろいろ調べてelispの設定を変えた
- arglist-intro が引数リストの最初のインデント設定、+はデフォルトのoffset値
- arglist-close が引数リストの最後のインデント設定、これにはcc-modeで用意されている関数が適用できる
- c-lineup-close-paren を使っていい感じにする
c-set-offset関数の第2引数には、offset値を指定することができます。offset値とは、次のindentの深さが現在のindentの深さからどれだけ離れているかを示す値です。整数、特殊symbol(+、-、++、--、*、/)等を指定することができます。
EmacsにおけるC++ source codeの細かいindent設定方法 (1) - I.S.の日記
;; c++-mode-hookでコードスタイル変更 (c-set-offset 'arglist-intro '+) (c-set-offset 'arglist-close 'c-lineup-close-paren)
この関数や中括弧のインデント設定はEmacsのcc-modeで全て名前がついている。
CC Mode Manual
これを読むのは苦しいので有志の方の書き下しを参考にさせていただいた。