Xcodeソースの自動フォーマット


178

C#の開発者として、私はVisual Studio 2008の自動フォーマットに大きく依存しています。具体的には、ずさんな実装の後、CTRL+ KDキーボードショートカットを使用して強制的に元の状態に戻します。

私は今、Objective-Cを学ぼうとしていますが、Xcodeの特定の機能がありませんが、フォーマットショートカットほど苦痛なものはないでしょう。私のグーグル検索は何も組み込まれていませんが、いくつかのハックがあるようです。何か不足していますか、またはこの機能はXcodeにネイティブに存在しませんか?


1
これに対する答えでXcodeのスクリプトソリューションにはいくつかの良いリンクがあるのSOの質問は
nallの

リンクをありがとう。私もこれを見つけました:blog.carbonfive.com/2009/08/iphone/code-formatting-in-xcode それはあなたのリンクと基本的に同じテクニックをカバーしています。私はそれを試してみて、それがどれほどうまく機能するかを見ていきます。
jslatts

1
UniversalIndentGUIを使用したサードパーティのソリューション:blog.carbonfive.com/2009/08/iphone/code-formatting-in-xcode
jslatts

この質問に似ています。答えには、コードを再インデントするためのメニュー項目とキーボードショートカットがあります。stackoverflow.com
questions / 3558709

2
これに関して過去5年間でAppleからのイノベーションはありましたか?この質問はまだ関連していますか、それともXCodeがコードをフォーマットするための新しくより良いソリューションですか?
mm24 2014年

回答:


133

残念なことに、XcodeにはVSやJalopy for Eclipseほど広範囲なものがありません。Structure > Re-Indentソースファイルにコードを貼り付けるときに使用される自動フォーマットなど、いくつかの異なる機能があります。でも私は完全にあなたと一緒です。書式設定の問題に役立つ何かが間違いなくあるはずです。


3
ありがとう、少なくとも私は何かを逃していないことを知っています。自動識別は痛みを軽減するのに役立ちますが、サードパーティのソリューションを検討する必要があります。
jslatts

5
これは答えとして選択されるべきではありません。@kenからの以下の答えは正しいです
Ryan Angilly 2013

@RyanAngillyこの質問が回答された年に注意してください。それ以来、Xcodeで多くのことが変更されました。;-)
Marc W

1
@RyanAngilly kenは自動インデントの方法のみを説明しました。それは「フォーマット」(空白と改行の追加と削除など)が実際に意味することではありません。
dergab

5
インデントはcontrol-iで修正でき、選択したすべての行をインデントします。
zaph

427

だとCtrl+ i

またはローテクの場合は、カットして貼り付けます。貼り付け時に再フォーマットされます。


ありがとう!特にメニューには実際にはキーボードショートカットが表示されないため、これは役立ちます。
jslatts

37
しかし、これはインデントのみを行います。ブレースの移動、改行の処理などについてはどうですか?
Peter Ajtai 2012

14
コードフォーマッタが処理するすべての処理を実行するわけではないため、これは受け入れるべきではありません。再インデントするだけです
powerj1984

1
良いヒント。XCodeがこれを持っていないという余分な欠陥。
AndrewK 2013

4
はい@ powerj1984。私もこれに失望しています。やその他の演算子の後,に適切なスペースを追加しません=。それが意図していること。他には何もありません。ここでMacは本当にMicrosoftから学ぶ必要があります。
shashwat 14

35

検討する価値のある2つのオプションをお勧めします。まったく新しいものと進化しているものの両方。

ClangFormat-Xcode(無料)-各cmd + sファイルが特定のスタイルに再フォーマットされて保存され、チーム内での展開が容易

@travisjefferyによる、Clangのフォーマットツールを使用してコードをフォーマットするXcodeプラグイン。

clang-formatを使用すると、Clangを使用して、LLVM、Google、Chromium、Mozilla、WebKit、または独自の構成などのスタイルにコードをフォーマットできます。

Objective-Clean(有料、まだ試していない)-事前定義されたスタイルルールに違反するとアプリでビルドエラーが発生する-チーム内で使用するのが非常に難しいため、試さなかった。

最小限の設定で、Xcodeにアプリを使用してルールを適用できます。ルールに違反していることが判明した場合、Xcodeはビルドエラーをスローし、問題のある行に移動します。


このプラグインを使用して独自のフォーマット構成をどのように作成しますか?
nbro 2014

27

xcodeでは、このショートカットを使用してソースコードを再インデントできます

インデントの問題があるファイルに移動し、これに従ってください:

  • Cmd+ Aすべてのソースコードを選択する

  • Ctrl+ Iインデントし直す

お役に立てれば。


18

私の個人的なお気に入りのPrettyC wantabeはuncrustifyです:http ://uncrustify.sourceforge.net/ 。数十億のオプションがあるので、UniversalIndentGUI_macx(sourceforgeにもあります)をダウンロードして、オプションを好きなように設定できるように誰かが書いたGUIをダウンロードすることもお勧めします。

次に、このカスタムユーザースクリプトを追加して、選択したテキストのセキュリティを解除できます。

#! /bin/sh
#
# uncrustify!
echo -n "%%%{PBXSelection}%%%"
/usr/local/bin/uncrustify -q -c /usr/local/share/uncrustify/geo_uncrustify.cfg -l oc+ <&0
echo -n "%%%{PBXSelection}%%%"

特にブロックのフォーマットに関して、unrustifyで問題が発生しました。
Liron Yahdav、2015年

12

Command+ Aを使用してすべてのコンテンツを選択し、次のCtrl+ Iを使用して選択したコンテンツをフォーマットできます。



8

Cmd A + Ctrl I

またはCmd A右クリックします。後藤構造- >再インデント


6

iOS / OS X開発者を支援するインテリジェントなObjective-C IDEであるAppCodeのライセンスを購入することを検討してください。AppCodeはXcodeと完全に互換性がありますが、強力な機能の追加はXcodeを超えています

AppCodeは、JetBrainsのIntellij IDEA IDEのObjective-Cバリアントです。彼らはまた、Visual Studioへの人気のあるReSharper拡張機能の作者でもあります。これは、ここからの主な目的は、Microsoft製品にIDEAエクスペリエンスのタッチをもたらす必死の試みのように思われます。

AppCodeは、完全に近いリファクタリングとコードナビゲーションサポートを提供する独自のコードアナライザーを使用しています。コードを再インデントして完全に再フォーマットする機能もあります(ハードケースではいくつかのフォーマット設定を見逃し続けていますが、ほとんどの場合うまく機能します)。

もちろん、体験版を試してみてください。



4

あなたはそのXCodeプラグインを試すことができますhttps://github.com/benoitsan/BBUncrustifyPlugin-Xcode

githubリポジトリのクローンを作成し、XCodeでプラグインプロジェクトを開いて実行します。自動的にインストールされます。フォーマッタプラグインを使用する前にXodeを再起動します。

以前にuncrustify utilをインストールすることを忘れないでください。自作、例

brew install uncrustify

PS「編集後」>「フォーマットコード」>「BBUncrustifyPlugin設定」>「保存時にフォーマット」で「フォーマット後の保存」機能をオンにできます。

これがあなたのために役立つことを願っています;-)



3

CTRL + i

それでおしまい。

COMMAND+ なしi


6
これは回答としてすでに4回言及されています-回答する前に他の回答を読んでください。
フィッシング2015

また、CMD + iは、製品->プロファイルに行くのと同じですが、フォーマットとは異なります。
インガ2016

3

ClangFormatの使用をお勧めします。インストールするには、次の手順に従ってください。

  1. XCode対応のアルカトラズパッケージマネージャーをインストールXcode 5+およびOS X 10.9+をサポート
  2. インストール後、XCodeを再起動します。
  3. XCodeを開く->ウィンドウメニュー->パッケージマネージャー
  4. ClangFormatを検索(検索)してインストールします。インストール後、XCodeを再起動します。
  5. XCodeメニューで、編集-> Clang Formatサブメニューを使用してフォーマットできます。

さまざまなタイプのフォーマットを選択できます。また、保存時にフォーマットを有効にすることで、自動フォーマット機能を利用できます。

ここに画像の説明を入力してください


1
これはXCodeの8+に使用できなくなりました
ネイサンF.

はい、そうです。@ NathanFiscaletti 7.2から9.2以上にアップグレードしたソリューションが機能しなくなりました。しかし、私は解決策を見つけました。新しい投稿を追加します!
csonuryilmaz

Alcatrazをインストールしましたが、ClangFormatプラグインはXcode 9ではサポートされなくなりました。github.com/travisjeffery/ClangFormat-Xcode/issues/129
csonuryilmaz

1

Xcodeバージョン3.xの場合、Uncrustifyで「ユーザースクリプト」を使用する必要があります。ここでは例を示します。

#!/bin/sh

echo -n "%%%{PBXSelection}%%%"
$YOURPATH_TO_UNCRUSTIFY/uncrustify -q -c $YOURPATH_TO_UNCRUSTIFY_CONFIG/CodeFormatConfig.cfg -l OC+
echo -n "%%%{PBXSelection}%%%"

上記をXcodeの「ユーザースクリプト」に追加します。

Xcodeバージョン4.xの場合は、このブログを読んでください。Xcode4のコードのフォーマット

このように、「Appleサービス」を使用しましたが、十分ではありません。エクスペリエンスが遅くなりすぎます。誰か同じことをしているのですか?

アップルが「ユーザースクリプト」をドロップする理由.... xD


1

まず、XCode設定の「インデント」セクションを調べます。かなりカスタマイズできます...

より細かい制御については、アップルのXCodeユーザーデフォルトドキュメントを参照してください。(表示するには開発者ログインが必要な場合があります)。たとえば、ターミナルで次のように入力して、「インデントオンペースト」を無効にすることができました。

defaults write com.apple.XCODE PBXIndentOnPaste No

設定を読み戻すには:

defaults read com.apple.XCODE PBXIndentOnPaste

1

これは空白が区切られていない言語でのみ機能しますが、私の解決策は、空白以外のすべての空白を削除し、通常はEOLを区切る文字の後に改行を追加します(例: ';'を '; \ n'で置き換えます)。^ + iソリューション。

私はPythonを使用しています。

コード例、ファイル名を置き換えるだけ:

python -c "import re; open(outfile,'w').write(re.sub('[\t\n\r]','',open(infile).read()).replace(';',';\n').replace('{','{\n').replace('}','}\n'))"

完璧ではありませんが(例:forループ)、私は気に入っています。


1

uncrustifyを使用するXcode Formatterを使用して、チームが望むとおりにソースコードを簡単にフォーマットできます。

インストール推奨される方法は、GitHubプロジェクトを複製するか、https://github.com/octo-online/Xcode-formatterからダウンロードし、XcodeプロジェクトにCodeFormatterディレクトリを追加して取得することです。Xcodeショートカットベースのコードフォーマット:ショートカット現在のワークスペースで変更されたソースをフォーマットする自動コードフォーマット:プロジェクトにビルドフェーズを追加して、アプリケーションがすべてのソースフォーマットをビルドするときに現在のソースをフォーマットします:1つのコマンドラインですべてのコードをフォーマットしますプロジェクトで共有されているフォーマットルール:編集して同じ構成を使用しますプロジェクト開発チームのファイル1)プロジェクトのコードフォーマッタをセットアップする方法インストールuncrustifyインストール最も簡単な方法は、brewを使用することです:$ brew install uncrustify

brewをインストールするには:$ ruby​​ –e“ $(curl –fsSkl raw.github.com/mxcl/homebrew/go)”

uncrustifyが/ usr / local / bin $にあることを確認します。

uncrustifyのバージョンが0.60未満の場合、最近のObjective-C構文が最近追加されたため、手動でインストールする必要がある場合があります。.xcodeprojファイルの横にCodeFormatterディレクトリを追加します

Xcodeアプリケーションの名前が「Xcode」(デフォルト名)であることを確認します。この名前は、Applications /ディレクトリ(またはカスタムXcodeインストールディレクトリ)に表示されます。MacにXcodeのインスタンスが複数ある場合は注意してください。プロジェクトのインスタンスが実際に「Xcode」という名前であることを確認してください!(これはなぜですか?この名前は現在開いているXcodeファイルを見つけるために使用されます。CodeFormatter/ Uncrustify_opened_Xcode_sources.workflow appleScriptを参照してください)。オートマトンサービスUncrustify_opened_Xcode_sources.workflowをインストールします。このファイルを〜/ Library / Services /フォルダーにコピーします(必要に応じてこのフォルダーを作成します)。注意:.workflowファイルをダブルクリックすると、インストールされますが、ファイルは削除されます!そのコピーを他のユーザーに残してください。

プロジェクトのビルド時に開いているファイルをフォーマットする方法次の行を含むビルドフェーズ「スクリプトの実行」を追加します。

sh CodeFormatter / scripts / formatOpendSources.sh

コマンドラインでファイルをフォーマットする方法

現在開いているファイルをフォーマットするには、formatOpenedSources.shを使用します。

$ sh CodeFormatter / scripts / formatOpendSources.sh

すべてのファイルをフォーマットするには、formatAllSources.shを使用します。

$ sh CodeFormatter / scripts / formatAllSources.sh PATH

PATHは、ソースパスに置き換える必要があります。

例えば; プロジェクト名がTestAppの場合、コマンドは次のようになります。

$ sh CodeFormatter / scripts / formatAllSources.sh TestApp

プロジェクト内のすべてのファイルを検索し、uncrustify_objective_c.cfgファイルで構成されているすべてのファイルをフォーマットします。

フォーマッタのルールを変更する方法

TextEditで開いたCodeFormatter / uncrustify_objective_c.cfgを編集します。


0

さて、私は簡単な方法を探していました。そして、媒体で見つけてください。

最初にjsonテキストをコピーし、jsonlintまたは類似のもので検証します。次に、jsonlintからコピーするために、すでにjsonがフォーマットされています。そして、形式を維持したままXcodeにコードを貼り付けます、ショートカットshift+ option+ command+v


-1

次のパスでショートカットを表示して変更できます:Xcode-> Preferences-> Key Bindings。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.