Formateo automático de la fuente Xcode

179

Como desarrollador de C #, me he vuelto altamente dependiente del formateo automático en Visual Studio 2008. Específicamente , usaré el atajo de teclado CTRL+ para forzar las cosas a ponerse en forma después de mi implementación descuidada.KD

Ahora estoy tratando de aprender Objective-C y me faltan ciertas características en Xcode, pero probablemente ninguna sea tan dolorosa como el atajo de formato. Mis búsquedas en Google no arrojaron nada integrado, aunque parece que hay algunos hacks. ¿Me estoy perdiendo algo o esta característica no existe de forma nativa en Xcode?

jslatts
fuente
1
Hay algunos buenos enlaces a las soluciones de scripting de Xcode en las respuestas a esta pregunta de SO
hasta el
Gracias por el enlace. También encontré esto: blog.carbonfive.com/2009/08/iphone/code-formatting-in-xcode Cubre básicamente la misma técnica que su enlace. Lo intentaré y veré qué tan bien funciona.
jslatts
1
Solución de terceros que utiliza UniversalIndentGUI: blog.carbonfive.com/2009/08/iphone/code-formatting-in-xcode
jslatts
Similar a esta pregunta; la respuesta tiene un elemento de menú y un atajo de teclado para volver a sangrar el código: stackoverflow.com/questions/3558709/…
Basil Bourque
2
¿Ha habido alguna innovación de Apple en los últimos 5 años en esto? ¿Esta pregunta sigue siendo relevante o XCode ahora es una solución nueva y mejor para formatear código?
mm24

Respuestas:

134

Desafortunadamente, Xcode no tiene nada tan extenso como VS o Jalopy para Eclipse disponible. Hay ALGUNAS características dispares, Structure > Re-Indentcomo el formato automático que se usa al pegar el código en el archivo fuente. Sin embargo, estoy totalmente contigo; definitivamente debería haber algo allí para ayudar con los problemas de formato.

Marc W
fuente
3
Gracias, al menos sé que no me falta algo. La autoidentificación ayuda a mitigar el dolor, pero tendré que buscar una solución de terceros.
jslatts
55
Esto no debe seleccionarse como la respuesta. la respuesta a continuación de @ken es correcta
Ryan Angilly
@RyanAngilly Observe el año en que se respondió esta pregunta. Muchas cosas han cambiado con Xcode desde entonces. ;-)
Marc W
1
@RyanAngilly ken solo describió cómo auto-sangrar. Eso no es lo que realmente significa "formato" (con espacios en blanco y adición y eliminación de nuevas líneas y esas cosas).
dergab
55
La sangría se puede arreglar con control-i, que sangrará todas las líneas seleccionadas.
zaph
427

Eso es Ctrl+ i.

O para baja tecnología, corte y luego pegue. Se formateará en pegar.

Conocido
fuente
¡Gracias! Eso es útil, especialmente porque el menú en realidad no muestra el atajo de teclado.
jslatts
37
Pero esto solo hace sangría. ¿Qué pasa con mover aparatos ortopédicos, cuidar los saltos de línea, etc.?
Peter Ajtai
14
No debe aceptarse ya que no realiza todas las cosas que manejaría un formateador de código. Simplemente vuelve a
sangrar
1
Buen consejo. Cojo extra que XCode no tenga esto.
AndrewK
44
sí @ powerj1984. También estoy decepcionado con esto. No añade espacios adecuados después ,, =u otros operadores. Lo que hace solo intenta. Nada más. Mac realmente necesita aprender de Microsoft aquí.
shashwat
35

Me gustaría recomendar dos opciones que vale la pena considerar. Ambos bastante nuevos y en evolución.

ClangFormat-Xcode (gratis): en cada archivo cmd + s se reformatea a un estilo específico y se guarda, fácil de implementar dentro del equipo

Un complemento Xcode para formatear su código usando las herramientas de formato de Clang, por @travisjeffery.

Con el formato clang puedes usar Clang para formatear tu código a estilos como LLVM, Google, Chromium, Mozilla, WebKit o tu propia configuración.

Objective-Clean (pagado, no lo probé todavía): errores de compilación de la aplicación si se violan las reglas de estilo predefinidas, posiblemente bastante difícil de usar dentro del equipo, por lo que no lo probé.

Con una configuración muy mínima, puede hacer que Xcode use nuestra aplicación para hacer cumplir sus reglas. Si alguna vez te descubren violando una de tus reglas, Xcode arrojará un error de compilación y te llevará directamente a la línea ofensiva.

matm
fuente
¿Cómo se crea su propia configuración de formato con este complemento?
nbro
27

En xcode, puede usar este acceso directo para volver a sangrar su código fuente

Vaya al archivo, que tiene problemas de sangría, y siga esto:

  • Cmd+ Apara seleccionar todos los códigos fuente

  • Ctrl+ Ivolver a sangrar

Espero que esto ayude.

Nguyen Minh Binh
fuente
18

Mi favorito personal PrettyC wantabe no está incrustado: http://uncrustify.sourceforge.net/ . Sin embargo, tiene algunos miles de millones de opciones, por lo que también le sugiero que descargue UniversalIndentGUI_macx, (también en sourceforge) una GUI que alguien escribió para ayudarlo a configurar las opciones de la manera que desee.

A continuación, puede agregar este script de usuario personalizado para eliminar el texto seleccionado:

#! /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
fuente
He tenido problemas con la falta de confianza, especialmente con los bloques de formato.
Liron Yahdav el
12

Puede usar Command+ Apara seleccionar todo el contenido y luego Ctrl+ Ipara formatear el contenido seleccionado.

Paweł Walaszek
fuente
9

También siento que xcode debería tener esta función. Entonces hice una extensión para hacerlo: Swimat

Instalación simple por brew cask install swimat avance

Puede intentarlo, consulte https://github.com/Jintin/Swimat para obtener más información.

Jintin
fuente
8

Cmd A + Ctrl I

O Cmd AY luego haga clic derecho . Ir a estructura -> Re-sangría

Yuvi
fuente
6

Considere comprar una licencia para AppCode , un IDE inteligente de Objective-C que ayuda a los desarrolladores de iOS / OS X. AppCode es totalmente compatible con Xcode, pero va más allá de Xcode al agregar funciones potentes .

AppCode, una variante Objective-C de Intellij IDEA IDE de JetBrains . También son autores del popular ReSharper. extensión para Visual Studio, cuyo objetivo principal desde aquí parece ser un intento desesperado de aportar un toque de experiencia IDEA a un producto de Microsoft.

AppCode está utilizando su propio analizador de código que brinda refactorización casi perfecta y soporte de navegación de código. También existe la posibilidad de volver a sangrar y reformatear completamente el código (aunque todavía me faltan un par de configuraciones de formato en casos difíciles, pero la mayoría funciona bien).

Puede probar la versión de prueba, por supuesto.

jazzcat
fuente
4

Puede probar ese complemento XCode https://github.com/benoitsan/BBUncrustifyPlugin-Xcode

Simplemente clone el repositorio de github, abra el proyecto de complemento en XCode y ejecútelo. Se instalará automáticamente. Reinicie Xode antes de usar el complemento formateador.

No te olvides de instalar uncrustify util antes. Homebrew, por ejemplo

brew install uncrustify

PD Puede activar la función "después de guardar el formato" en Edición> Código de formato> BBUncrustifyPlugin Preferences> Formato al guardar

Espero que esto te sea útil ;-)

romanvbabenko
fuente
3

CTRL + i

Eso es.

(no COMMAND+ i)

LianY
fuente
66
Esto ya se ha mencionado como respuesta 4 veces. Lea las otras respuestas antes de responder.
fishinear
Además, CMD + i es lo mismo que ir a Producto -> Perfil, que no es lo mismo que formatear.
inga
3

Sugiero usar ClangFormat. Para instalar, siga estos pasos:

  1. Instale el administrador de paquetes Alcatraz para XCode Admite Xcode 5+ y OS X 10.9+
  2. Después de la instalación, reinicie XCode.
  3. Abra XCode -> Menú de ventana -> Administrador de paquetes
  4. Busque (encuentre) ClangFormat e instálelo. Después de la instalación, reinicie XCode nuevamente.
  5. Ahora, en el menú XCode, puede usar el submenú Editar -> Formato de argot para formatear.

Puede elegir diferentes tipos de formato. Además, al habilitar Formatear al guardar puede obtener la capacidad de formateo automático.

ingrese la descripción de la imagen aquí

csonuryilmaz
fuente
1
Esto ya no está disponible en XCode 8+
Nathan F.
Sí, tienes razón @NathanFiscaletti. He actualizado de 7.2 a 9.2 y la solución anterior ya no funciona. Pero encontré una solución. ¡Agregaré una nueva publicación!
csonuryilmaz
Instalé Alcatraz pero el complemento ClangFormat ya no es compatible con Xcode 9. github.com/travisjeffery/ClangFormat-Xcode/issues/129
csonuryilmaz
1

Si su Xcode versión 3.x, debe usar "Script de usuario" con Uncrustify , este es un ejemplo:

#!/bin/sh

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

agregue arriba a su Xcode "User Script".

si Xcode versión 4.x, creo que debería leer este blog: Formateo de código en Xcode 4 ,

De esta manera, usé los "Servicios de Apple", pero no es lo suficientemente bueno, porque causa una experiencia demasiado lenta, ¿alguien tiene lo mismo?

¿Por qué Apple Drop "script de usuario" .... xD

poplax
fuente
1

Primero, examine la sección "Sangría" de las preferencias de XCode. Puedes personalizar las cosas un poco allí ...

Para un control más detallado, consulte el documento Valores predeterminados del usuario de XCode de apple. (Puede requerir un inicio de sesión de desarrollador para ver). Por ejemplo, pude desactivar el "sangría al pegar" ingresando lo siguiente en la terminal:

defaults write com.apple.XCODE PBXIndentOnPaste No

para volver a leer su configuración:

defaults read com.apple.XCODE PBXIndentOnPaste
SteveS
fuente
1

Esto solo funciona para los idiomas que no están delimitados por espacios en blanco, pero mi solución es eliminar todos los espacios en blanco excepto los espacios, luego agregar una nueva línea después de los caracteres que generalmente delinean EOL (por ejemplo, reemplazar ';' con '; \ n') y luego hacer lo omnipresente ^ + i solución.

Yo uso Python.

Código de ejemplo, simplemente reemplace los nombres de archivo:

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

No es perfecto (Ejemplo: para bucles), pero me gusta.

blerbl
fuente
1

¡Podemos usar Xcode Formatter que usa uncrustify para formatear fácilmente su código fuente como su equipo exactamente quiere ser !.

Instalación La forma recomendada es clonar el proyecto GitHub o descargarlo desde https://github.com/octo-online/Xcode-formatter y agregar el directorio CodeFormatter en su proyecto Xcode para obtener: Formato de código basado en atajos Xcode: un atajo para formatee las fuentes modificadas en el espacio de trabajo actual formateo automático del código: agregue una fase de compilación a su proyecto para formatear las fuentes actuales cuando la aplicación construya todas las fuentes formateado: formatee todo su código con una línea de comando y sus reglas de formateo compartidas por el proyecto: edite y use una misma configuración archivo con el equipo de desarrollo de su proyecto 1) Cómo configurar el formateador de código para su proyecto Instalar uncrustify La forma más sencilla es usar brew: $ brew install uncrustify

Para instalar brew: $ ruby ​​–e “$ (curl –fsSkl raw.github.com/mxcl/homebrew/go)”

Compruebe que uncrustify se encuentra en / usr / local / bin $ que no incrusta

Si su versión no incrustada es inferior a 0.60, es posible que deba instalarla manualmente ya que recientemente se agregó la sintaxis moderna de Objective-C. Agregue el directorio CodeFormatter junto a su archivo .xcodeproj

Verifique que su aplicación Xcode se llame "Xcode" (nombre predeterminado). Puede ver este nombre en el directorio Aplicaciones / (o en el directorio de instalación personalizado de Xcode). Tenga cuidado si tiene varias instancias de Xcode en su Mac: ¡asegúrese de que el proyecto en realidad se llame "Xcode"! (¿Por qué esto? Este nombre se utiliza para encontrar archivos Xcode abiertos actualmente. Consulte CodeFormatter / Uncrustify_opened_Xcode_sources.workflow appleScript). Instale el servicio del automatizador Uncrustify_opened_Xcode_sources.workflow Copie este archivo a su carpeta ~ / Library / Services / (cree esta carpeta si es necesario). Tenga cuidado: al hacer doble clic en el archivo .workflow, lo instalará, ¡pero el archivo se eliminará! Asegúrese de dejar una copia para otros usuarios.

Cómo formatear los archivos abiertos al compilar el proyecto Agregue un "script de ejecución" de fase de compilación que contenga la siguiente línea:

sh CodeFormatter / scripts / formatOpendSources.sh

Cómo formatear archivos en la línea de comando

Para formatear los archivos abiertos actualmente, use formatOpenedSources.sh:

$ sh CodeFormatter / scripts / formatOpendSources.sh

Para formatear todos los archivos, use formatAllSources.sh:

$ sh CodeFormatter / scripts / formatAllSources.sh PATH

RUTA debe ser reemplazado por su ruta de origen.

P.ej; si el nombre del proyecto es TestApp, entonces el comando será

$ sh CodeFormatter / scripts / formatAllSources.sh TestApp

buscará todos los archivos del proyecto y formateará todos los archivos configurados en el archivo uncrustify_objective_c.cfg.

Cómo cambiar las reglas del formateador

Editar CodeFormatter / uncrustify_objective_c.cfg abierto con TextEdit

Ajeet Sharma
fuente
0

Bueno, estaba buscando una manera fácil. Y descúbrelo en medio .

Primero para copiar el texto json y validarlo en jsonlint o algo similar. Luego, para copiar desde jsonlint, el json ya está formateado. Y pegue el código en Xcode conservando el formato, acceso directo shift+ option+ command+v

Sábalo
fuente
-1

Puede ver y cambiar cualquier acceso directo en esta ruta: Xcode -> Preferencias -> Asignaciones de teclas.

erdikanik
fuente