2013-06-02 40 views
16

CDTコードフォーマッタはかなり選択肢が豊富ですが、コードブロックを無視するように指示する機能はありません。この機能は、Javaコードフォーマッターに存在する:コードブロックのEclipse CDTコードフォーマッタを無効にする方法

// @formatter:off 
... // code that should not be formatted 
// @formatter:on 

この機能は存在しないと私はそれを知らない、または誰でも任意のまともな回避策を知っていますか?

私の特定のケースでは、特定のレイアウトを持つデータ構造(列挙型と文字列の配列)を定義しようとしています。

答えて

4

利用のastyle(アーティスティック・スタイル)フォーマッタ、それは組み込みのフォーマッタのEclipse CDTよりはるかに優れていて、あなたが必要な特徴を持っています

http://astyle.sourceforge.net/astyle.html#_Disable_Formatting

例:これをフォーマットする

#include <iostream> 

int main(int argc, char** argv) 
{ 
// *INDENT-OFF* 
std::cout<<"hello world"<<'\n'; 
// *INDENT-ON* 
} 

astyleを使用すると// インデントオフと// インデントオンの間のコードはインデントされませんが、他のフォーマット設定も無効になりますこの場合の指示の間隔のように、アステイルは実行されます。

自分自身を外部ツールとして設定して使用します。 唯一の問題は、外部ツールにホットキーはありませんが、「最後に起動された外部ツールを実行する」ホットキーが1つあり、外部ツールを1つだけ使用する場合は同様に機能します。設定(Linux)の程度

詳細:

のastyle:

あなたのディストリビューションのリポジトリからか、公式サイトを経由して簡単にそれを得ることができます。セットアップするには

の書式設定で設定ファイル:

http://astyle.sourceforge.net/astyle.html#_Options_File

私はホームフォルダのバリアントを使用し、単に作成します。あなたの$ HOMEでastylerc、鉱山は含まれています

--suffix=none 
--style=allman 
--indent=tab=4 
--max-code-length=70 
--close-templates 
--keep-one-line-blocks 
--break-elseifs 
--break-closing-brackets 
--align-reference=type 
--align-pointer=type 
--indent-classes 
--indent-modifiers 
--indent-switches 
--indent-cases 
--indent-labels 
--indent-col1-comments 
--min-conditional-indent=0 
--pad-oper 
--pad-header 
--unpad-paren 

のEclipse:

"ファイル名を指定して実行" メニュー - >外部ツール - >外部ツールの構成が...新しい "プログラム" を追加した構成でのウィンドウ:

  • 場所:は/ usr/binに/のastyle(使用whereisはまたはこれを確認するために探します)

  • 作業ディレクトリ:$ {} project_loc

  • 個の
  • 引数:完了時に

    • ティック更新の資源:同じウィンドウ、リフレッシュタブで$ {} selected_resource_loc

  • ティック "を選択したリソース"

同じウィンドウ、共通タブ:お気に入りメニューで

  • 表示、ティック "外部ツール"
+0

私はアステイルを完全に忘れてしまった!ここからいくつかの使用例を追加するとこの回答が受け入れられます: http://astyle.sourceforge.net/astyle.html#_Disable_Formatting – Freerobots

+0

申し訳ありませんが、これをeclipseの外部ツールとして使用するには、Argumentsセクションの "$ {resource_loc}"を使用して、現在開いているファイルをフォーマットするように設定します。 – Freerobots

+0

'// *インデントオフ*'は誰のためにも動作しますか?私のastyle v2.03では、それはちょうど無視されました。 – veio

0

私は、これらを拡張子が無視されたファイルに貼り付けて、フォーマッタによって無視され、適切な場所にこのファイルを含めることができると思います。これを試してみました。データ構造がインデクサー(つまり、オートコンプリートの仕事)を取り上げました。それでも、Javaの "@formatter:..."構文と同等のものがあればいいでしょう。

+0

この方法のもう一つの欠点は、リファクタリング(特にリネーム)が機能しないことです。また、データ構造の変更は自動的には取得されないため、クリーンで再構築のサイクルが必要です。 – Freerobots

0

答えが「いいえ」である限り、このような機能は存在しません。 SDKを使用してそのような機能を実装することは可能かもしれません。私の経験では、ドキュメンテーションは非常に不完全で、Eclipse開発者を見つけるのは非常に難しいことに注意してください。しかし、この機能はJavaフォーマッタに存在し、オープンソース製品であるため、ロジックをC++フォーマッタに移植する可能性があります。

また、ファイル全体をフォーマットするのではなく、選択してフォーマットするだけで済みます。

1

を使用している場合OS XまたはLinux(Windowsはチェックしていませんが、サポートされている可能性があります)では、代わりにclang-formatとを使用できます。

clang-formatClangが設けられているフォーマッタユーティリティであり、C/C++ /にObjCコードでオン/オフコメント// clang-format on// clang-format offサポート。 Clangビルドの概要とユーティリティツールについては、こちらをご覧ください。 http://clang.llvm.org/get_started.html ClangLLVMファイルをシステムにインストールする必要はありません。 clang-formatClangなしで動作するスタンドアロンプ​​ログラムであるためです。オン/オフコメントは旧バージョンではサポートされていませんので、ver 3.7(2015年2月現在のSVNから入手可能)を使用してください。

はEclipse CDTのclang-formatを使用できるEclipseプラグインです。 https://github.com/wangzw/cppstyle

FYI。以下は、CDT Bugzillaの同じ機能要求です。機能は将来正式にサポートされるかもしれませんが、clang-formatまたはAstyleを使用すると、現時点ではより良い解決策と思われます。 https://bugs.eclipse.org/bugs/show_bug.cgi?id=453926

関連する問題