Automatische Formatierung der Xcode-Quelle


178

Als C # -Entwickler bin ich stark von der automatischen Formatierung in Visual Studio 2008 abhängig geworden. Insbesondere werde ich die Tastenkombination CTRL+ verwenden K, Dum die Dinge nach meiner schlampigen Implementierung wieder in Form zu bringen.

Ich versuche jetzt, Objective-C zu lernen und vermisse bestimmte Funktionen in Xcode, aber wahrscheinlich sind keine so schmerzhaft wie die Formatierungsverknüpfung. Meine Google-Suche hat nichts Eingebautes ergeben, obwohl es anscheinend einige Hacks gibt. Fehlt mir etwas oder ist diese Funktion in Xcode nicht nativ vorhanden?


1
Es gibt einige gute Links zu Xcode-
Skriptlösungen

Danke für den Link. Ich habe das auch gefunden: blog.carbonfive.com/2009/08/iphone/code-formatting-in-xcode Es behandelt im Grunde die gleiche Technik wie Ihr Link. Ich werde es versuchen und sehen, wie gut es funktioniert.
Jslatts

1
Drittanbieterlösung mit UniversalIndentGUI: blog.carbonfive.com/2009/08/iphone/code-formatting-in-xcode
jslatts

Ähnlich wie bei dieser Frage; Antwort hat Menüpunkt und Tastaturkürzel zum erneuten Einrücken des
Basil Bourque

2
Hat es in den letzten 5 Jahren Innovationen von Apple gegeben? Ist diese Frage noch relevant oder hat XCode jetzt eine neue und bessere Lösung zum Formatieren von Code?
mm24

Antworten:


133

Leider ist für Xcode nicht annähernd so umfangreich wie VS oder Jalopy für Eclipse verfügbar. Es gibt einige unterschiedliche Funktionen, wie z. B. Structure > Re-Indentdie automatische Formatierung, die beim Einfügen von Code in Ihre Quelldatei verwendet wird. Ich bin aber total bei dir; Es sollte auf jeden Fall etwas vorhanden sein, das bei Formatierungsproblemen hilft.


3
Danke, zumindest weiß ich, dass mir etwas nicht fehlt. Die automatische Identifizierung hilft zwar dabei, die Schmerzen etwas zu lindern, aber ich muss nach einer Lösung von Drittanbietern suchen.
Jslatts

5
Dies sollte nicht als Antwort ausgewählt werden. Die Antwort unten von @ken ist richtig
Ryan Angilly

@ RyanAngilly Beachten Sie das Jahr, in dem diese Frage beantwortet wurde. Viele Dinge haben sich seitdem mit Xcode geändert. ;-)
Marc W

1
@ RyanAngilly Ken hat nur beschrieben, wie man automatisch einrückt. Das ist nicht das, was "Format" (mit Leerzeichen und Hinzufügen und Entfernen neuer Zeilen und dergleichen) wirklich bedeutet.
dergab

5
Der Einzug kann mit control-i festgelegt werden, wodurch alle ausgewählten Zeilen eingerückt werden.
Zaph

426

Das ist Ctrl+ i.

Oder für Low-Tech ausschneiden und dann einfügen. Es wird auf Paste neu formatiert.


Vielen Dank! Dies ist hilfreich, insbesondere da im Menü die Tastenkombination nicht angezeigt wird.
Jslatts

37
Dies macht aber nur Einrückungen. Was ist mit beweglichen Zahnspangen, Zeilenumbrüchen usw.?
Peter Ajtai

14
Es sollte nicht akzeptiert werden, da es nicht alle Aufgaben erfüllt, die ein Code-Formatierer ausführen würde. Es wird nur neu
eingerückt

1
Guter Tipp. Extra lahm, dass XCode dies nicht hat.
AndrewK

4
yes @ powerj1984. Das enttäuscht mich auch. Es fügt keine richtigen Räume nach ,, =oder andere Betreiber. Was es nur beabsichtigt. Nichts anderes. Mac muss hier wirklich von Microsoft lernen.
Shashwat

35

Ich möchte zwei erwägenswerte Optionen empfehlen. Sowohl ganz neu als auch weiterentwickelt.

ClangFormat-Xcode (kostenlos) - Jede Cmd + s-Datei wird auf einen bestimmten Stil umformatiert und gespeichert und kann problemlos im Team bereitgestellt werden

Ein Xcode-Plug-In zum Formatieren Ihres Codes mit den Formatierungswerkzeugen von Clang von @travisjeffery.

Mit dem Clang-Format können Sie Ihren Code mit Clang nach Stilen wie LLVM, Google, Chromium, Mozilla, WebKit oder Ihrer eigenen Konfiguration formatieren.

Objective-Clean (bezahlt, noch nicht ausprobiert) - App-Fehler beim Erstellen von Builds, wenn vordefinierte Stilregeln verletzt werden - möglicherweise ziemlich schwer im Team zu verwenden, daher habe ich es nicht ausprobiert.

Mit sehr geringem Setup können Sie Xcode dazu bringen, unsere App zur Durchsetzung Ihrer Regeln zu verwenden. Wenn Sie jemals bei einem Verstoß gegen eine Ihrer Regeln ertappt werden, gibt Xcode einen Build-Fehler aus und bringt Sie direkt zur betreffenden Zeile.


Wie erstellen Sie mit diesem Plugin eine eigene Formatkonfiguration?
nbro

25

In xcode können Sie diese Verknüpfung verwenden, um Ihren Quellcode erneut einzurücken

Gehen Sie zur Datei, in der Einrückungsprobleme auftreten, und befolgen Sie diese Anweisungen:

  • Cmd+ A, um alle Quellcodes auszuwählen

  • Ctrl+ Ierneut einrücken

Hoffe das hilft.


18

Mein persönlicher Favorit PrettyC wantabe ist uncrustify: http://uncrustify.sourceforge.net/ . Es gibt jedoch einige Milliarden Optionen, daher empfehle ich Ihnen auch, UniversalIndentGUI_macx (ebenfalls auf sourceforge) herunterzuladen, eine GUI, die jemand geschrieben hat, um die Optionen so einzustellen, wie Sie sie mögen.

Sie können dann dieses benutzerdefinierte Benutzerskript hinzufügen, um den ausgewählten Text zu entkrusten:

#! /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}%%%"

Ich hatte Probleme mit der Entkrustung, insbesondere mit Formatierungsblöcken.
Liron Yahdav

12

Sie können Command+ verwenden A, um alle Inhalte auszuwählen, und Ctrl+, Ium den ausgewählten Inhalt zu formatieren.


9

Ich denke auch, dass xcode diese Funktion haben sollte. Also habe ich eine Erweiterung gemacht: Swimat

Einfache Installation von brew cask install swimat Vorschau

Sie können es versuchen, siehe https://github.com/Jintin/Swimat für weitere Informationen.


8

Cmd A + Ctrl I

Oder Cmd Aund dann Rechtsklick . Goto Struktur -> Re-einrücken


6

Erwägen Sie den Kauf einer Lizenz für AppCode , eine intelligente Objective-C-IDE, die iOS / OS X-Entwicklern hilft. AppCode ist vollständig kompatibel mit Xcode, geht jedoch über Xcode hinaus und bietet leistungsstarke Funktionen .

AppCode eine Objective-C-Variante der Intellij IDEA IDE von JetBrains . Sie sind auch Autoren der beliebten ReSharper- Erweiterung von Visual Studio, deren Hauptzweck von hier aus ein verzweifelter Versuch zu sein scheint, einem Microsoft-Produkt einen Hauch von IDEA-Erfahrung zu verleihen.

AppCode verwendet einen eigenen Code-Analysator, der nahezu perfektes Refactoring und Unterstützung für die Code-Navigation bietet. Es besteht auch die Möglichkeit, Code neu einzurücken und vollständig neu zu formatieren (obwohl mir in schwierigen Fällen immer noch einige Formatierungseinstellungen fehlen, aber meistens funktioniert es gut).

Sie können natürlich auch die Testversion ausprobieren.



4

Sie können das XCode-Plugin https://github.com/benoitsan/BBUncrustifyPlugin-Xcode ausprobieren

Klonen Sie einfach das Github-Repository, öffnen Sie das Plugin-Projekt in XCode und führen Sie es aus. Es wird automatisch installiert. Starten Sie Xode neu, bevor Sie das Formatierungs-Plugin verwenden.

Vergessen Sie nicht, uncrustify util vorher zu installieren. Homebrew, zum Beispiel

brew install uncrustify

PS Sie können die Funktion "Nach dem Speichern der Formatierung" unter Bearbeiten> Formatcode> BBUncrustifyPlugin-Einstellungen> Format beim Speichern aktivieren

Hoffe das wird nützlich für dich ;-)



3

CTRL + i

das ist es.

(nein COMMAND+ i)


6
Dies wurde bereits 4 Mal als Antwort erwähnt - bitte lesen Sie die anderen Antworten, bevor Sie antworten.
fishinear

Außerdem entspricht CMD + i dem Aufrufen von Produkt -> Profil, was nicht dem Formatieren entspricht.
Inga

3

Ich schlage vor, ClangFormat zu verwenden. Führen Sie zur Installation die folgenden Schritte aus:

  1. Installieren Sie den Alcatraz-Paketmanager für XCode. Unterstützt Xcode 5+ und OS X 10.9+
  2. Starten Sie nach der Installation XCode neu.
  3. Öffnen Sie XCode -> Fenstermenü -> Paketmanager
  4. Suchen (finden) Sie ClangFormat und installieren Sie es. Starten Sie XCode nach der Installation erneut.
  5. Jetzt können Sie im XCode-Menü das Untermenü Bearbeiten -> Clang-Format zum Formatieren verwenden.

Sie können verschiedene Formatierungsarten auswählen. Durch Aktivieren von Format On Save können Sie auch die automatische Formatierung aktivieren .

Geben Sie hier die Bildbeschreibung ein


1
Dies ist nicht mehr verfügbar auf XCode 8+
Nathan F.

Ja, Sie haben Recht @NathanFiscaletti Ich habe ein Upgrade von 7.2 auf 9.2 und höher durchgeführt. Die Lösung funktioniert nicht mehr. Aber ich habe eine Lösung gefunden. Ich werde einen neuen Beitrag hinzufügen!
Csonuryilmaz

Ich habe Alcatraz installiert, aber das ClangFormat- Plugin wird von Xcode 9 nicht mehr unterstützt. github.com/travisjeffery/ClangFormat-Xcode/issues/129
csonuryilmaz

1

Wenn Sie Ihre Xcode-Version 3.x verwenden, sollten Sie "User Script" mit Uncrustify verwenden . Hier ein Beispiel:

#!/bin/sh

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

füge oben zu deinem Xcode "User Script" hinzu.

Wenn Xcode Version 4.x, sollten Sie diesen Blog lesen: Code Formatierung in Xcode 4 ,

Auf diese Weise verwendet die "Apple Services", aber es ist nicht gut genug, verursachen zu langsame Erfahrung, hat jemand das gleiche?

warum Apple "Benutzerskript" fallen lassen .... xD


1

Untersuchen Sie zunächst den Abschnitt "Einrückung" der XCode-Einstellungen. Sie können dort einige Dinge anpassen ...

Weitere Informationen zur genaueren Steuerung finden Sie im XCode User Defaults- Dokument von Apple. (Zum Anzeigen ist möglicherweise ein Entwickler-Login erforderlich.) Zum Beispiel konnte ich den "Einzug beim Einfügen" deaktivieren, indem ich im Terminal Folgendes eingab:

defaults write com.apple.XCODE PBXIndentOnPaste No

um Ihre Einstellung zurückzulesen:

defaults read com.apple.XCODE PBXIndentOnPaste

1

Dies funktioniert nur für Sprachen, bei denen keine Leerzeichen abgegrenzt sind. Meine Lösung besteht jedoch darin, alle Leerzeichen außer Leerzeichen zu entfernen und dann nach Zeichen, die normalerweise EOL abgrenzen, eine neue Zeile hinzuzufügen (z. B. ';' durch 'ersetzen; \ n') und dann das Allgegenwärtige auszuführen ^ + i Lösung.

Ich benutze Python.

Beispielcode, ersetzen Sie einfach die Dateinamen:

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

Es ist nicht perfekt (Beispiel: für Schleifen), aber ich mag es.


1

Wir können Xcode Formatter verwenden, der uncrustify verwendet, um Ihren Quellcode einfach so zu formatieren, wie Ihr Team es genau möchte!.

Installation Die empfohlene Methode besteht darin, das GitHub-Projekt zu klonen oder von https://github.com/octo-online/Xcode-formatter herunterzuladen und das CodeFormatter-Verzeichnis in Ihr Xcode-Projekt einzufügen, um Folgendes zu erhalten: Xcode-Verknüpfungs-basierte Code-Formatierung: eine Verknüpfung zu Formatieren geänderter Quellen im aktuellen Arbeitsbereich Automatische Code-Formatierung: Fügen Sie Ihrem Projekt eine Erstellungsphase hinzu, um aktuelle Quellen zu formatieren, wenn die Anwendung alle Quellen formatiert. Formatieren Sie Ihren gesamten Code mit einer Befehlszeile. Ihre vom Projekt gemeinsam genutzten Formatierungsregeln: Bearbeiten und verwenden Sie dieselbe Konfiguration Datei mit Ihrem Projekt-Entwicklerteam 1) So richten Sie den Code-Formatierer für Ihr Projekt ein Installieren Sie Uncrustify. Am einfachsten ist es, Brew zu verwenden: $ Brew Install Uncrustify

So installieren Sie Brew: $ ruby ​​–e “$ (curl –fsSkl raw.github.com/mxcl/homebrew/go)”

Überprüfen Sie, ob sich uncrustify in / usr / local / bin $ befindet, das nicht verkrustet

Wenn Ihre nicht verkrustete Version niedriger als 0,60 ist, müssen Sie sie möglicherweise manuell installieren, da kürzlich die moderne Objective-C-Syntax hinzugefügt wurde. Fügen Sie das CodeFormatter-Verzeichnis neben Ihrer .xcodeproj-Datei hinzu

Überprüfen Sie, ob Ihre Xcode-Anwendung "Xcode" (Standardname) heißt. Sie können diesen Namen im Verzeichnis Applications / (oder in Ihrem benutzerdefinierten Xcode-Installationsverzeichnis) sehen. Seien Sie vorsichtig, wenn Sie mehrere Instanzen von Xcode auf Ihrem Mac haben: Stellen Sie sicher, dass die eine tatsächlich "Xcode" heißt! (Warum das? Dieser Name wird verwendet, um aktuell geöffnete Xcode-Dateien zu finden. Siehe CodeFormatter / Uncrustify_opened_Xcode_sources.workflow appleScript). Installieren Sie den Automator-Dienst. Uncrustify_opened_Xcode_sources.workflow Kopieren Sie diese Datei in Ihren Ordner ~ / Library / Services / (erstellen Sie diesen Ordner bei Bedarf). Seien Sie vorsichtig: Wenn Sie auf die Workflow-Datei doppelklicken, installieren Sie sie, aber die Datei wird entfernt! Stellen Sie sicher, dass Sie eine Kopie davon für andere Benutzer hinterlassen.

Formatieren geöffneter Dateien beim Erstellen des Projekts Fügen Sie eine Erstellungsphase "Skript ausführen" hinzu, die die folgende Zeile enthält:

sh CodeFormatter / scripts / formatOpendSources.sh

So formatieren Sie Dateien in der Befehlszeile

Verwenden Sie formatOpenedSources.sh, um aktuell geöffnete Dateien zu formatieren:

$ sh CodeFormatter / scripts / formatOpendSources.sh

Verwenden Sie formatAllSources.sh, um alle Dateien zu formatieren:

$ sh CodeFormatter / scripts / formatAllSources.sh PATH

PATH muss durch Ihren Quellpfad ersetzt werden.

Z.B; Wenn der Projektname TestApp ist, lautet der Befehl

$ sh CodeFormatter / scripts / formatAllSources.sh TestApp

Es sucht nach allen Dateien im Projekt und formatiert alle Dateien wie in der Datei uncrustify_objective_c.cfg konfiguriert.

So ändern Sie die Regeln des Formatierers

Bearbeiten Sie CodeFormatter / uncrustify_objective_c.cfg, das mit TextEdit geöffnet wurde


0

Nun, ich suchte nach einem einfachen Weg. Und finde es auf Medium heraus .

Kopieren Sie zuerst den json-Text und validieren Sie ihn auf jsonlint oder ähnlichem. Um dann von jsonlint zu kopieren, ist der json bereits formatiert. Und fügen Sie den Code unter Beibehaltung des Formats in Xcode ein, Verknüpfung shift+ option+ command+v


-1

Sie können jede Verknüpfung unter diesem Pfad anzeigen und ändern: Xcode -> Einstellungen -> Tastenkombinationen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.