Automatyczne formatowanie źródła Xcode

179

Jako programista C # bardzo uzależniłem się od automatycznego formatowania w Visual Studio 2008. W szczególności użyję skrótu klawiaturowego CTRL+ K, Daby przywrócić porządek po mojej niechlujnej implementacji.

Próbuję teraz nauczyć się Objective-C i brakuje mi niektórych funkcji w Xcode, ale prawdopodobnie żadna nie jest tak bolesna jak skrót formatowania. Moje wyszukiwania w Google nie dały żadnego wbudowanego, choć wydaje się, że są pewne hacki. Czy coś mi brakuje lub czy ta funkcja nie istnieje natywnie w Xcode?

jslatts
źródło
1
W odpowiedziach na to pytanie SO
nall
Dzięki za link. Ja też to znalazłem: blog.carbonfive.com/2009/08/iphone/code-formatting-in-xcode Obejmuje w zasadzie tę samą technikę, co twój link. Spróbuję i zobaczę, jak dobrze działa.
jslatts
1
Rozwiązanie innej firmy korzystające z UniversalIndentGUI: blog.carbonfive.com/2009/08/iphone/code-formatting-in-xcode
jslatts
Podobne do tego pytania; odpowiedź zawiera element menu i skrót klawiaturowy do ponownego wcięcia kodu: stackoverflow.com/questions/3558709/…
Basil Bourque
2
Czy w ciągu ostatnich 5 lat Apple wprowadził w tym zakresie jakieś innowacje? Czy to pytanie jest nadal aktualne, czy XCode jest teraz nowym i lepszym rozwiązaniem do formatowania kodu?
mm24

Odpowiedzi:

134

Niestety, Xcode nie ma nic tak obszernego jak VS lub Jalopy dla Eclipse. Istnieją NIEKTÓRE różne funkcje, takie jak Structure > Re-Indentautomatyczne formatowanie używane podczas wklejania kodu do pliku źródłowego. Jednak jestem całkowicie z tobą; zdecydowanie powinno być coś, co pomoże rozwiązać problemy z formatowaniem.

Marc W.
źródło
3
Dziękuję, przynajmniej wiem, że czegoś mi nie brakuje. Automatyczne identyfikowanie pomaga nieco uśmierzyć ból, ale będę musiał przyjrzeć się rozwiązaniu innej firmy.
jslatts
5
to nie powinno być wybrane jako odpowiedź. odpowiedź poniżej z @ken jest prawidłowa
Ryan Angilly,
@RyanAngilly Zwróć uwagę, w którym roku udzielono odpowiedzi na to pytanie. Od tego czasu wiele rzeczy zmieniło się w Xcode. ;-)
Marc W
1
@RyanAngilly ken opisał tylko, jak stosować automatyczne wcięcia. Nie to naprawdę oznacza „format” (ze spacjami, dodawaniem i usuwaniem nowej linii i tym podobnymi).
dergab
5
Wcięcie można naprawić za pomocą control-i, co spowoduje wcięcie wszystkich zaznaczonych linii.
zaph
427

To jest Ctrl+ i.

Lub w przypadku mało zaawansowanych technologii wytnij, a następnie wklej. Zostanie sformatowany na wklej.

Rozpoznać
źródło
Dzięki! Jest to pomocne, zwłaszcza że menu w rzeczywistości nie pokazuje skrótu klawiaturowego.
jslatts
37
Ale to tylko robi wcięcie. A co z przenoszeniem aparatów ortodontycznych, dbaniem o przerwy w linii itp.
Peter Ajtai
14
Nie należy go akceptować, ponieważ nie wykonuje wszystkich rzeczy, które mógłby obsłużyć program do formatowania kodu. Po prostu ponownie wcina się,
powerj1984,
1
Dobra wskazówka. Extra lame, że XCode tego nie ma.
AndrewK
4
tak @ powerj1984. Ja też jestem tym rozczarowany. Nie dodać odpowiednie pomieszczenia po ,, =lub innych operatorów. To, co robi, to tylko zamiar. Nic więcej. Mac naprawdę musi się tutaj nauczyć od firmy Microsoft.
shashwat
35

Polecam dwie warte rozważenia opcje. Zarówno całkiem nowe, jak i ewoluujące.

ClangFormat-Xcode (bezpłatny) - każdy plik cmd + s jest ponownie formatowany do określonego stylu i zapisywany, łatwy do wdrożenia w zespole

Wtyczka Xcode do formatowania kodu za pomocą narzędzi formatujących Clang autorstwa @travisjeffery.

Dzięki formatowi clang możesz użyć Clang do sformatowania kodu do stylów takich jak LLVM, Google, Chromium, Mozilla, WebKit lub do własnej konfiguracji.

Objective-Clean (płatne, jeszcze nie wypróbowałem) - podnoszenie błędów kompilacji aplikacji, jeśli zostaną naruszone predefiniowane zasady stylu - prawdopodobnie dość trudne do użycia w zespole, więc nie wypróbowałem tego.

Przy bardzo minimalnej konfiguracji możesz sprawić, by Xcode używał naszej aplikacji do egzekwowania reguł. Jeśli kiedykolwiek zostaniesz przyłapany na naruszeniu jednej z twoich zasad, Xcode wyrzuci błąd kompilacji i przeniesie Cię prosto do linii naruszającej.

matm
źródło
Jak stworzyć własną konfigurację formatu za pomocą tej wtyczki?
nbro
27

W xcode możesz użyć tego skrótu, aby ponownie wciąć kod źródłowy

Przejdź do pliku, w którym występują problemy z wcięciami, i wykonaj następujące czynności:

  • Cmd+, Aaby zaznaczyć wszystkie kody źródłowe

  • Ctrl+ Ido ponownego wcięcia

Mam nadzieję że to pomoże.

Nguyen Minh Binh
źródło
18

Moja osobista ulubiona PrettyC Wantabe jest nieufna: http://uncrustify.sourceforge.net/ . Ma jednak kilka miliardów opcji, więc sugeruję również pobranie UniversalIndentGUI_macx, (również na sourceforge) GUI, który ktoś napisał, aby pomóc ustawić opcje tak, jak lubisz.

Następnie możesz dodać ten niestandardowy skrypt użytkownika, aby nie ufać zaznaczonemu tekstowi:

#! /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}%%%"
geowar
źródło
Miałem problemy z nieufnością, zwłaszcza z formatowaniem bloków.
Liron Yahdav
12

Możesz użyć Command+, Aaby zaznaczyć całą zawartość, a następnie Ctrl+, Iaby sformatować wybraną zawartość.

Paweł Walaszek
źródło
9

Uważam również, że xcode powinien mieć tę funkcję. Zrobiłem więc rozszerzenie, aby to zrobić: Swimat

Prosta instalacja wg brew cask install swimat zapowiedź

Możesz spróbować, zobacz https://github.com/Jintin/Swimat, aby uzyskać więcej informacji.

Jintin
źródło
8

Cmd A + Ctrl I

Lub Cmd AA następnie kliknij prawym przyciskiem myszy . Idź do struktury -> Ponowne wcięcie

yuvi
źródło
6

Rozważ zakup licencji na AppCode , inteligentne IDE Objective-C, które pomaga programistom iOS / OS X. AppCode jest w pełni kompatybilny z Xcode, ale wykracza poza Xcode, dodając zaawansowane funkcje .

Koduj AppCode wariant Objective-C IDE IDE Intellij firmy JetBrains . Są także autorami popularnego rozszerzenia ReSharper do Visual Studio, którego głównym celem wydaje się desperacka próba wprowadzenia odrobiny doświadczenia IDEA do produktu Microsoft.

AppCode używa własnego analizatora kodu, który zapewnia niemal idealną refaktoryzację i obsługę nawigacji po kodzie. Istnieje również możliwość ponownego wcięcia i całkowitego sformatowania kodu (chociaż wciąż brakuje mi kilku ustawień formatowania w trudnych przypadkach, ale głównie działa dobrze).

Oczywiście możesz wypróbować wersję próbną.

jazzcat
źródło
4

Możesz wypróbować tę wtyczkę XCode https://github.com/benoitsan/BBUncrustifyPlugin-Xcode

Po prostu sklonuj repozytorium github, otwórz projekt wtyczki w XCode i uruchom go. Zostanie zainstalowany automatycznie. Uruchom ponownie Xode przed użyciem wtyczki programu formatującego.

Nie zapomnij wcześniej zainstalować narzędzia niezaufanego. Homebrew, na przykład

brew install uncrustify

PS Możesz włączyć funkcję „po zapisaniu formatowania” w Edycja> Formatuj kod> BBUncrustifyPlugin Preferencje> Formatuj przy zapisywaniu

Mam nadzieję, że to ci się przyda ;-)

romanvbabenko
źródło
3

CTRL + i

Otóż ​​to.

(nie COMMAND+ i)

LianY
źródło
6
Zostało to wspomniane już 4 razy jako odpowiedź - przed udzieleniem odpowiedzi przeczytaj pozostałe odpowiedzi.
fishinear
Ponadto CMD + i to to samo, co przejście do Product -> Profile, co nie jest tym samym, co formatowanie.
inga
3

Sugeruję użycie ClangFormat. Aby zainstalować, wykonaj następujące kroki:

  1. Zainstaluj menedżera pakietów Alcatraz dla XCode obsługuje Xcode 5+ i OS X 10.9+
  2. Po instalacji zrestartuj XCode.
  3. Otwórz XCode -> Menu okna -> Menedżer pakietów
  4. Wyszukaj (znajdź) ClangFormat i zainstaluj go. Po instalacji ponownie uruchom XCode.
  5. Teraz w menu XCode możesz użyć podmenu Edit -> Clang Format do formatowania.

Możesz wybrać różne typy formatowania. Ponadto, włączając opcję Formatuj przy zapisywaniu , możesz zyskać możliwość automatycznego formatowania.

wprowadź opis obrazu tutaj

csonuryilmaz
źródło
1
To nie jest już dostępne w XCode 8+
Nathan F.
Tak, masz rację @NathanFiscaletti Zaktualizowałem rozwiązanie z 7.2 do 9.2 i nowszej, które już nie działa. Ale znalazłem rozwiązanie. Dodam nowy post!
csonuryilmaz
Zainstalowałem Alcatraz, ale wtyczka ClangFormat nie jest już obsługiwana w Xcode 9. github.com/travisjeffery/ClangFormat-Xcode/issues/129
csonuryilmaz
1

Jeśli masz Xcode w wersji 3.x, powinieneś użyć „User Script” z Uncrustify , oto przykład:

#!/bin/sh

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

dodaj powyżej do "skryptu użytkownika" Xcode.

jeśli Xcode w wersji 4.x, myślę, że powinieneś przeczytać ten blog: Formatowanie kodu w Xcode 4 ,

W ten sposób korzystałem z „usług Apple”, ale nie jest to wystarczająco dobre, powoduje zbyt powolne działanie, czy ktoś ma to samo?

dlaczego Apple porzuca „skrypt użytkownika” .... xD

poplax
źródło
1

Najpierw sprawdź sekcję „Wcięcie” w preferencjach XCode. Możesz tam trochę dostosować rzeczy ...

Aby uzyskać bardziej szczegółową kontrolę, zapoznaj się z dokumentem XCode User Defaults firmy Apple. (Może wymagać logowania programisty do wyświetlenia). Na przykład udało mi się wyłączyć „wcięcie przy wklejaniu”, wpisując w terminalu:

defaults write com.apple.XCODE PBXIndentOnPaste No

aby odczytać swoje ustawienie:

defaults read com.apple.XCODE PBXIndentOnPaste
SteveS
źródło
1

Działa to tylko w przypadku języków, w których nie są wytyczone spacjami, ale moim rozwiązaniem jest usunięcie wszystkich białych znaków z wyjątkiem spacji, a następnie dodanie nowej linii po znakach, które zwykle wyznaczają EOL (np. Zamień „;” na „; \ n”), a następnie wykonaj wszechobecne ^ + i rozwiązanie.

Używam Pythona.

Przykładowy kod, po prostu zastąp nazwy plików:

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

Nie jest doskonały (przykład: w przypadku pętli), ale mi się podoba.

blerbl
źródło
1

Możemy użyć Xcode Formatter, który używa uncrustify do łatwego formatowania kodu źródłowego tak, jak chce Twój zespół!

Instalacja Zalecanym sposobem jest sklonowanie projektu GitHub lub pobranie go z https://github.com/octo-online/Xcode-formatter i dodanie katalogu CodeFormatter do projektu Xcode, aby uzyskać: Formatowanie kodu oparte na skrótach Xcode: skrót do formatowanie zmodyfikowanych źródeł w bieżącym obszarze roboczym automatyczne formatowanie kodu: dodaj fazę kompilacji do projektu, aby sformatować bieżące źródła, gdy aplikacja buduje wszystkie źródła formatowanie: sformatuj cały kod za pomocą jednej linii poleceń, twoje zasady formatowania współdzielone przez projekt: edytuj i używaj tej samej konfiguracji plik z zespołem programistów projektu 1) Jak skonfigurować program formatujący kod dla swojego projektu Zainstaluj uncrustify Najprostszym sposobem jest użycie brew: $ brew install uncrustify

Aby zainstalować napar: $ ruby ​​–e „$ (curl –fsSkl raw.github.com/mxcl/homebrew/go)”

Sprawdź, czy plik unrustify znajduje się w / usr / local / bin $, który nie jest zaufany

Jeśli twoja nieufna wersja jest niższa niż 0.60, być może będziesz musiał zainstalować ją ręcznie, ponieważ nowoczesna składnia Objective-C została ostatnio dodana. Dodaj katalog CodeFormatter obok pliku .xcodeproj

Sprawdź, czy Twoja aplikacja Xcode nosi nazwę „Xcode” (nazwa domyślna). Możesz zobaczyć tę nazwę w katalogu Applications / (lub w niestandardowym katalogu instalacyjnym Xcode). Zachowaj ostrożność, jeśli masz wiele wystąpień Xcode na swoim komputerze Mac: upewnij się, że projekt nosi nazwę „Xcode”! (Dlaczego? Ta nazwa jest używana do znajdowania aktualnie otwartych plików Xcode. Zobacz CodeFormatter / Uncrustify_opened_Xcode_sources.workflow appleScript). Zainstaluj usługę automatora Uncrustify_opened_Xcode_sources.workflow Skopiuj ten plik do folderu ~ / Library / Services / (utwórz ten folder, jeśli to konieczne) .Uwaga: klikając dwukrotnie plik .workflow, zainstalujesz go, ale plik zostanie usunięty! Pamiętaj, aby zostawić jego kopię innym użytkownikom.

Jak sformatować otwarte pliki podczas budowania projektu Dodaj fazę kompilacji „uruchom skrypt” zawierającą następujący wiersz:

sh CodeFormatter / scripts / formatOpendSources.sh

Jak formatować pliki w linii poleceń

Aby sformatować aktualnie otwarte pliki, użyj formatOpenedSources.sh:

$ sh CodeFormatter / scripts / formatOpendSources.sh

Aby sformatować wszystkie pliki, użyj formatAllSources.sh:

$ sh CodeFormatter / scripts / formatAllSources.sh PATH

ŚCIEŻKĘ należy zastąpić ścieżką źródła.

Na przykład; jeśli nazwa projektu to TestApp, polecenie będzie

$ sh CodeFormatter / scripts / formatAllSources.sh TestApp

wyszuka wszystkie pliki w projekcie i sformatuje wszystkie pliki zgodnie z konfiguracją w pliku uncrustify_objective_c.cfg.

Jak zmienić reguły programu formatującego

Edytuj CodeFormatter / uncrustify_objective_c.cfg otwórz za pomocą TextEdit

Ajeet Sharma
źródło
0

Cóż, szukałem łatwego sposobu. I dowiedz się na medium .

Najpierw skopiuj tekst json i zweryfikuj go na jsonlint lub czymś podobnym. Następnie, aby skopiować z jsonlint, json jest już sformatowany. I wklej kod na Xcode z zachowaniem formatu, skrótem shift+ option+ command+v

Aloza
źródło
-1

Możesz zobaczyć i zmienić dowolny skrót na tej ścieżce: Xcode -> Preferencje -> Key Bindings.

erdikanik
źródło