Formatação automática da fonte Xcode

178

Como um desenvolvedor C #, eu tornaram-se altamente dependente da formatação automática no Visual Studio 2008. Especificamente, vou usar o CTRL+ K, Datalho de teclado para forçar as coisas de volta em forma depois da minha implementação desleixada.

Agora estou tentando aprender o Objective-C e perdendo alguns recursos do Xcode, mas provavelmente nenhum é tão doloroso quanto o atalho de formatação. Minhas pesquisas no Google não produziram nada incorporado, embora pareça haver alguns hacks. Estou faltando alguma coisa ou esse recurso não existe nativamente no Xcode?

jslatts
fonte
1
Existem alguns bons links para as soluções de script do Xcode nas respostas a essa pergunta de SO
nall
Obrigado pelo link. Também encontrei isso: blog.carbonfive.com/2009/08/iphone/code-formatting-in-xcode Ele cobre basicamente a mesma técnica do seu link. Vou tentar e ver como funciona.
jslatts
1
Solução de terceiros usando o UniversalIndentGUI: blog.carbonfive.com/2009/08/iphone/code-formatting-in-xcode
jslatts
Semelhante a esta pergunta; resposta tem item de menu e atalho de teclado para código re-indent: stackoverflow.com/questions/3558709/...
Basil Bourque
2
houve alguma inovação da Apple nos últimos 5 anos? Essa pergunta ainda é relevante ou o XCode agora é uma solução nova e melhor para formatar o código?
mm24 27/05

Respostas:

133

Infelizmente, o Xcode não tem nada tão extenso quanto o VS ou o Jalopy for Eclipse disponível. Existem ALGUNS recursos diferentes, Structure > Re-Indentcomo a formatação automática usada quando você cola o código no arquivo de origem. Eu estou totalmente com você, no entanto; Definitivamente, deve haver algo para ajudar nos problemas de formatação.

Marc W
fonte
3
Obrigado, pelo menos eu sei que não estou perdendo algo. A identificação automática ajuda a aliviar a dor, mas terei que procurar uma solução de terceiros.
jslatts
5
isso não deve ser selecionado como a resposta. a resposta abaixo de @ Ken está correto
Ryan Angilly
@RyanAngilly Observe o ano em que esta pergunta foi respondida. Muitas coisas mudaram com o Xcode desde então. ;-)
Marc W
1
O @RyanAngilly ken descreveu apenas como recuar automaticamente. Não é isso que "formato" (com espaço em branco, adição e remoção de novas linhas e outras coisas) realmente significa.
Dergab 17/04
5
O recuo pode ser corrigido com o controle-i, que recuará todas as linhas selecionadas.
zaph 5/09/15
427

Isso é Ctrl+ i.

Ou para baixa tecnologia, corte e cole. Reformatará na pasta.

Ken
fonte
Obrigado! Isso é útil, especialmente porque o menu não mostra o atalho do teclado.
jslatts
37
Mas isso só faz recuo. E quanto a mover chaves, cuidar de quebras de linha, etc?
precisa
14
Não deve ser aceito, pois não executa todas as coisas que um formatador de código manipularia. É apenas re-travessões,
powerj1984
1
Boa dica. Extra coxo que XCode não tem isso.
AndrewK
4
sim @ powerj1984. Também estou decepcionado com isso. Ele não adicionar espaços adequados depois ,, =ou outros operadores. O que faz apenas a intenção. Nada mais. O Mac realmente precisa aprender com a Microsoft aqui.
precisa saber é o seguinte
35

Eu gostaria de recomendar duas opções que vale a pena considerar. Tanto novo quanto em evolução.

ClangFormat-Xcode (gratuito) - em cada cmd + s o arquivo é reformatado para um estilo específico e salvo, fácil de implantar dentro da equipe

Um plug-in do Xcode para formatar seu código usando as ferramentas de formato do Clang, por @travisjeffery.

Com o formato clang, você pode usar o Clang para formatar seu código para estilos como LLVM, Google, Chromium, Mozilla, WebKit ou sua própria configuração.

Objective-Clean (pago, ainda não testou) - o aplicativo gera erros de compilação se as regras de estilo predefinidas forem violadas - possivelmente muito difíceis de usar dentro da equipe, então não tentei.

Com uma configuração mínima, você pode fazer com que o Xcode use nosso aplicativo para impor suas regras. Se você for pego violando uma de suas regras, o Xcode lançará um erro de compilação e o levará direto para a linha ofensiva.

matm
fonte
Como você cria sua própria configuração de formato com este plugin?
Nbro 23/12/14
27

No xcode, você pode usar este atalho para reentrar seu código-fonte

Vá para o arquivo, que tem problemas de recuo, e siga isto:

  • Cmd+ Apara selecionar todos os códigos-fonte

  • Ctrl+ Irecuar

Espero que isto ajude.

Nguyen Minh Binh
fonte
18

Meu favor pessoal PrettyC wantabe não é confiável: http://uncrustify.sourceforge.net/ . No entanto, existem alguns bilhões de opções, então sugiro que você baixe o UniversalIndentGUI_macx, (também no sourceforge), uma GUI que alguém escreveu para ajudar a definir as opções da maneira que você gosta.

Em seguida, você pode adicionar este script de usuário personalizado para não creditar o texto selecionado:

#! /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
fonte
Eu tive problemas com descrustificar, especialmente com blocos de formatação.
Liron Yahdav
12

Você pode usar Command+ Apara selecionar todo o conteúdo e o próximo Ctrl+ Ipara formatar o conteúdo selecionado.

Paweł Walaszek
fonte
9

Eu também acho que o xcode deve ter essa função. Então eu fiz uma extensão para fazê-lo: Swimat

Instalação simples por brew cask install swimat pré-visualização

Você pode tentar, consulte https://github.com/Jintin/Swimat para obter mais informações.

Jintin
fonte
8

Cmd A + Ctrl I

Ou Cmd Aentão clique com o botão direito . Saltar Estrutura -> Reentrar

yuvi
fonte
6

Considere comprar uma licença para o AppCode , um IDE inteligente do Objective-C que ajuda os desenvolvedores do iOS / OS X. O AppCode é totalmente compatível com o Xcode, mas vai além do Xcode ao adicionar recursos poderosos .

AppCode uma variante Objective-C do Intellij IDEA IDE do JetBrains . Eles também são autores da popular extensão ReSharper para o Visual Studio, cujo principal objetivo a partir daqui parece uma tentativa desesperada de trazer um toque de experiência da IDEA a um produto da Microsoft.

O AppCode está usando seu próprio analisador de código, que oferece refatoração quase perfeita e suporte à navegação por código. Existe a capacidade de re-recuar e reformatar completamente o código (embora eu ainda continue perdendo algumas configurações de formatação em casos difíceis, mas na maioria das vezes funciona bem).

Você pode experimentar a versão de teste, é claro.

jazzcat
fonte
4

Você pode experimentar o plugin XCode https://github.com/benoitsan/BBUncrustifyPlugin-Xcode

Apenas clone o repositório do github, abra o projeto do plugin no XCode e execute-o. Será instalado automaticamente. Reinicie o Xode antes de usar o plugin do formatador.

Não se esqueça de instalar o utilitário uncrustify antes. Homebrew, por exemplo

brew install uncrustify

PS Você pode ativar o recurso "após salvar a formatação" em Editar> Código de formato> Preferências do BBUncrustifyPlugin> Formatar ao salvar

Espero que isso seja útil para você ;-)

romanvbabenko
fonte
3

CTRL + i

é isso aí.

(não COMMAND+ i)

LianY
fonte
6
Isso já foi mencionado como resposta 4 vezes - leia as outras respostas antes de responder.
fishinper perto de 29/12/15
Além disso, CMD + i é o mesmo que ir para Produto -> Perfil, que não é o mesmo que formatação.
inga
3

Eu sugiro usar ClangFormat. Para instalar, siga estas etapas:

  1. Instale o gerenciador de pacotes Alcatraz para XCode Suporta Xcode 5+ e OS X 10.9+
  2. Após a instalação, reinicie o XCode.
  3. Abra XCode -> Menu Janela -> Gerenciador de Pacotes
  4. Pesquise (encontre) o ClangFormat e instale-o. Após a instalação, reinicie o XCode.
  5. Agora, no menu XCode, você pode usar o submenu Editar -> Clang Format para formatar.

Você pode escolher diferentes tipos de formatação. Além disso, ao ativar Formatar ao salvar, você pode obter a capacidade de formatação automática.

insira a descrição da imagem aqui

csonuryilmaz
fonte
1
Isso não está mais disponível no XCode 8+
Nathan F.
Sim, você está certo @NathanFiscaletti Atualizei da 7.2 para a 9.2 e a solução acima não está mais funcionando. Mas eu encontrei uma solução. Vou adicionar uma nova postagem!
precisa saber é o seguinte
Eu instalei o Alcatraz, mas o plug-in ClangFormat não é mais suportado no Xcode 9. github.com/travisjeffery/ClangFormat-Xcode/issues/129
csonuryilmaz
1

Se o seu Xcode versão 3.x, você deve usar "User Script" Com Uncrustify , aqui está um Exemplo:

#!/bin/sh

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

adicione acima ao seu "User Script" do Xcode.

se o Xcode versão 4.x, acho que você deveria ler este blog: Formatação de código no Xcode 4 ,

Dessa forma, utilizamos o "Apple Services", mas não é bom o suficiente, causa experiência muito lenta, alguém tem a mesma coisa?

por que a apple drop "script do usuário" .... xD

poplax
fonte
1

Primeiro, examine a seção "Recuo" das preferências do XCode. Você pode personalizar as coisas um pouco ...

Para um controle mais refinado, consulte o documento XCode User Defaults da apple. (Pode ser necessário um login de desenvolvedor para ser exibido). Por exemplo, consegui desativar o "recuo na colagem" digitando o seguinte no terminal:

defaults write com.apple.XCODE PBXIndentOnPaste No

para ler novamente sua configuração:

defaults read com.apple.XCODE PBXIndentOnPaste
SteveS
fonte
1

Isso funciona apenas para idiomas com espaços em branco não delimitados, mas minha solução é remover todos os espaços em branco, exceto os espaços, e adicionar uma nova linha após os caracteres que normalmente delinearem a EOL (por exemplo, substituir ';' por '; \ n') e fazer o onipresente ^ + i solução.

Eu uso Python.

Código de exemplo, basta substituir os nomes dos arquivos:

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

Não é perfeito (exemplo: para loops), mas eu gosto.

blerbl
fonte
1

Podemos usar o Xcode Formatter, que usa o não-crustify para formatar facilmente seu código-fonte, como sua equipe quer ser!

Instalação A maneira recomendada é clonar o projeto GitHub ou fazer o download em https://github.com/octo-online/Xcode-formatter e adicionar o diretório CodeFormatter no seu projeto Xcode para obter: Formatação de código baseada em atalho do Xcode: um atalho para formatar fontes modificadas no espaço de trabalho atual formatação automática de código: adicione uma fase de construção ao seu projeto para formatar as fontes atuais quando o aplicativo cria todas as fontes formatação: formate todo o seu código com uma linha de comando suas regras de formatação compartilhadas pelo projeto: edite e use a mesma configuração arquivo com sua equipe de desenvolvimento do projeto 1) Como configurar o formatador de código para o seu projeto Instale não-crustify A maneira mais simples é usar o brew: $ brew install uncrustify

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

Verifique se o uncrustify está localizado em / usr / local / bin $, que não crustify

Se a sua versão não confiável é menor que 0,60, talvez seja necessário instalá-la manualmente, pois a sintaxe moderna do Objective-C foi adicionada recentemente. Adicione o diretório CodeFormatter ao lado do arquivo .xcodeproj

Verifique se o seu aplicativo Xcode se chama "Xcode" (nome padrão). Você pode ver esse nome no diretório Applications / (ou no diretório de instalação personalizado do Xcode). Tenha cuidado se você tiver várias instâncias do Xcode no seu mac: verifique se a do projeto é realmente chamada "Xcode"! (Por que isso? Esse nome é usado para localizar arquivos Xcode abertos no momento. Consulte CodeFormatter / Uncrustify_opened_Xcode_sources.workflow appleScript). Instale o serviço de automação Uncrustify_opened_Xcode_sources.workflow Copie esse arquivo para sua pasta ~ / Library / Services / (crie essa pasta se necessário). Cuidado: clicando duas vezes no arquivo .workflow, você o instalará, mas o arquivo será removido! Certifique-se de deixar uma cópia para outros usuários.

Como formatar arquivos abertos ao criar o projeto Adicione uma fase de criação "executar script" contendo a seguinte linha:

sh CodeFormatter / scripts / formatOpendSources.sh

Como formatar arquivos na linha de comando

Para formatar arquivos abertos no momento, use formatOpenedSources.sh:

$ sh CodeFormatter / scripts / formatOpendSources.sh

Para formatar todos os arquivos, use formatAllSources.sh:

$ sh CodeFormatter / scripts / formatAllSources.sh PATH

PATH deve ser substituído pelo seu caminho de origem.

Por exemplo; se o nome do projeto for TestApp, o comando será

$ sh CodeFormatter / scripts / formatAllSources.sh TestApp

ele procurará todos os arquivos no projeto e formatará todos os arquivos conforme configurado no arquivo uncrustify_objective_c.cfg.

Como alterar as regras do formatador

Edite CodeFormatter / uncrustify_objective_c.cfg aberto com o TextEdit

Ajeet Sharma
fonte
0

Bem, eu estava procurando uma maneira fácil. E descubra em médio .

Primeiro, copie o texto json e valide-o em jsonlint ou algo semelhante. Então, para copiar do jsonlint, o json já está formatado. E cole o código no Xcode preservando o formato, atalho shift+ option+ command+v

Sável
fonte
-1

Você pode ver e alterar qualquer atalho neste caminho: Xcode -> Preferences -> Key Bindings.

erdikanik
fonte