Eclipseのような「フォーマットコード」


7

EclipseではCTRL + SHIFT + F、インデントを修正するだけでなく、空白(例:c=a +b ;に修正c = a + b;)と行の長さも修正することができます。Emacs用の同様のツールを探しています。私が知っているのはC-x h TAB、それがインデントを修正することだけです。Emacsで(特にC / C ++)ソースファイルを完全にフォーマットする自動方法を知っていますか?


いいえ。ただし、AStyleやClangFormatなどの外部ツールの統合を記述することはそれほど難しくありません。関連する質問は次のとおりです。stackoverflow.com
Dmitry

インデントについては、コマンドprelude-cleanup-buffer-or-regionを使用すると、インデントをより速く実行できます。関数定義とprelude-indent-sensitive-modesをにコピーしますinit.el。次に、コマンドをのようなキーにバインドし、C-c iカーソルを他の場所に移動せずにインデントしたいときに使用します。
Tu Do

回答:


8

ClangFormatを使用してこれを実現できます。clang-formatツールをインストールした後、を使用clang-format.elしてemacsから適切なアクションを実行できます。MELPAclang-format.elからも入手できます。提供されているemacsコマンドは、必要に応じてバインドできます。祖先ディレクトリにあるファイルを使用して、フォーマットオプションをカスタマイズできます。clang-format-bufferclang-format-region.clang-format


ああ、統合はすでに存在しています。ただし、MELPAは、リンクしたバージョンとは異なる(明らかに新しい)バージョンを配布することに注意してください。
ドミトリー

Clang-Formatは、Emacsに統合された素晴らしいツールです。Eclipseと同じバインディングを使用するには、C / C ++モードのフックで次を使用できます(define-key c-mode-base-map (kbd "C-S-f") 'clang-format-region)。最近のバージョンでclang-formatは、JavascriptやJavaなどの他の言語もサポートしています。このページのLanguageKindを参照してください:clang.llvm.org/docs/ClangFormatStyleOptions.html
Guillaume Papin

わかりました。これはほぼ正常に機能しますが、弱点が1つだけあります。ネストされたテンプレート引数の終了角度のスペースが削除されますList<pair<int, int> >List<pair<int, int>> //Error!
Monkey Supersonic

@ user3000316 ここで設定値「標準」のオプションを確認してください。Cpp03この問題を修正するように設定できます。
Pradhan、2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.