2011-02-25 11 views
24

Parece que el nuevo Xcode 4 ya no aplica el XCCodeSenseFormattingOptions. Al menos para mí :(Xcode 4 con llave de apertura en la nueva línea

De todos modos, ¿sabe cómo poner la llave de apertura de la nueva línea para la terminación automática en Xcode 4? Solía ​​escribir en este terminal, pero no funciona para el nuevo Xcode.

defaults write com.apple.Xcode XCCodeSenseFormattingOptions -dict BlockSeparator "\\n" PreMethodDeclSpacing "" 
+0

Tengo el mismo problema. – David

+0

cierto ... mismo problema – xpepermint

+0

Respondí una pregunta similar aquí: (¡Hay una aplicación para eso!) http://stackoverflow.com/questions/4963034/xcode-built-in-snippets-edit/11135963#11135963 – Cocoaholic

Respuesta

4

no hay manera de hacerlo en Xcode 4. por favor, file a bug

+0

No pude encontrarlo en el informe de fallos, así que archivé un error - 10613842 –

29

XCode 4 usos "fragmentos de código" para hacer la terminación automática, y se suministra con una biblioteca incorporada de ellos:. puede ver el Código Biblioteca de fragmentos haciendo clic en el icono { } en el panel de la biblioteca, que probablemente se encuentra en la parte inferior derecha de su XCod principal. e ventana.

Todo de XCode 4 fragmentos de código incorporado en poner la llave de apertura en la misma línea que la declaración - esto es XCode de 4 fragmento de código para una sentencia de if, por ejemplo:

if (<#condition#>) { 
    <#statements#> 
} 

Así que si quería XCode 4 autocompletar de este modo:

if (<#condition#>) 
{ 
    <#statements#> 
} 

... entonces habría que modificar el fragmento de código en consecuencia. Esto, a su vez, conlleva dos problemas:

  1. Hay 44 fragmentos de código integrados en XCode 4, y tendría que editar cada uno por separado.
  2. XCode 4 no le permitirá editar los fragmentos de código incorporados.

Estos problemas son más difícil que el simple comando de defaults write que trabajaba en XCode 3 - pero es posible , si usted está decidido y se puede editar las listas de propiedades, para profundizar en las tripas de XCode 4 y cambie estos fragmentos de código uno por uno.

/Developer/Library/Xcode/PrivatePlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources/SystemCodeSnippets.codesnippets contiene la biblioteca de XCode 4 de fragmentos de código incorporados. Probablemente esto sea evidente, pero debe hacer una copia de seguridad de este archivo antes de cargar y editar, y luego debe hacer otra copia de seguridad y reservar una copia del archivo con los fragmentos de código nuevos y mejorados, porque tendrá Es casi seguro que sobrescribes el contenido de /Developer/Library/Xcode cuando instalas la próxima versión de XCode 4. (También es posible que Apple cambie el formato de este archivo, agregue nuevos fragmentos de código o haga cualquier cantidad de otras cosas que podrían hacer que esta respuesta sea ineficaz.)

Si tienes Xcode 4.3 o posterior instalado directamente desde App Store, todo está dentro del paquete Xcode.app. La ruta a SystemCodeSnippets.codesnippets es /Applications/Xcode.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources/SystemCodeSnippets.codesnippets.

De todos modos, se encuentra el archivo anterior contiene varias entradas como ésta:

<dict> 
    <key>IDECodeSnippetVersion</key> 
    <integer>1</integer> 
    <key>IDECodeSnippetCompletionPrefix</key> 
    <string>if</string> 
    <key>IDECodeSnippetContents</key> 
    <string>if (&lt;#condition#&gt;) { 
    &lt;#statements#&gt; 
}</string> 
    <key>IDECodeSnippetIdentifier</key> 
    <string>D70E6D11-0297-4BAB-88AA-86D5D5CBBC5D</string> 
    <key>IDECodeSnippetLanguage</key> 
    <string>Xcode.SourceCodeLanguage.C</string> 
    <key>IDECodeSnippetSummary</key> 
    <string>Used for executing code only when a certain condition is true.</string> 
    <key>IDECodeSnippetTitle</key> 
    <string>If Statement</string> 
    <key>IDECodeSnippetCompletionScopes</key> 
    <array> 
     <string>CodeBlock</string> 
    </array> 
</dict> 

Este es el fragmento de código para autocompletar una declaración if. Edite IDECodeSnippetContents para colocar la llave de apertura en una nueva línea, guarde su trabajo y luego reinicie XCode 4; si todo va bien, debería poder escribir una declaración if y ver los resultados.

Tendrá que hacer por lo menos media docena de ediciones más completa automáticamente para cubrir las más comunes (for, while, etc.), y si quieres ser exhaustiva que va a tomar alguna parte alrededor de 40 ediciones separadas. Es un montón de trabajo, pero si realmente, realmente quiere que el autocompletado de XCode 4 ponga sus llaves de apertura en una línea separada, se puede hacer.

+0

y la expresión regular es ... – Ziggy

+10

Hay una aplicación que puede usar para administrar y editar los fragmentos de código, llamada [Edición de fragmentos] (http : //cocoaholic.com/snippet_edit). Toma mucho de la administración de fragmentos. – epologee

+1

Tenga en cuenta que la Edición de fragmentos es $ 8 – arolson101

2

Compruebe hacia fuera mi (todo el sistema) modificado fragmentos de Xcode 4.2 aquí:

http://forrst.com/posts/Put_that_where_it_belongs_Xcode-PNL

Se debe tener cuidado de todas las llaves de apertura relevantes para iOS desarrollo ..

+0

Gracias por proporcionar el archivo modificado Sveinung! Copie y pegue, todo parece funcionar bien a partir de lo que he probado. (xCode 4.5b) –

+0

Genial, es bueno saber que 4.5 todavía admite este "truco". –

+0

Tuve que ponerlo en /Applications/Xcode.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources/SystemCodeSnippets.codesnippets, pero funciona en xcode 4.4 – arolson101

2

En Xcode 4.3.1, si edita el siguiente archivo como sudo desde el terminal, como describió Scott Forbes anteriormente, puede cambiar dónde aparece el paréntesis de apertura. Se iría con nuevas instalaciones de Xcode, me imagino, así que votaría que esto también es un error con Apple.

/Applications/Xcode.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources/SystemCodeSnippets.codesnippets

Leslie