Xcode源自动格式化


178

作为一个C#开发人员,我已经在Visual Studio 2008中变得高度依赖于自动格式化具体来说,我会用CTRL+ KD键盘快捷键力的东西放回形状我的草率实施后。

我现在正在尝试学习Objective-C,并且缺少Xcode的某些功能,但可能没有一个比格式化快捷键那么痛苦。我的Google搜索没有产生任何内置结果,尽管似乎有些黑客。我是否缺少某些东西,或者Xcode本身不存在此功能?


1
有一些很好的链接的答案Xcode的脚本解决这个SO问题
NALL

感谢您的链接。我也确实发现了这一点:blog.carbonfive.com/2009/08/iphone/code-formatting-in-xcode 它涵盖了与链接基本相同的技术。我将尝试一下,看看效果如何。
jslatts

1
使用UniversalIndentGUI的第三方解决方案:blog.carbonfive.com/2009/08/iphone/code-formatting-in-xcode
jslatts,2009年

类似于这个问题;答案有菜单项和键盘快捷键来重新缩进代码:stackoverflow.com/questions/3558709/...
罗勒布尔克

2
过去5年中,苹果公司有什么创新吗?这个问题是否仍然有意义,或者XCode现在是格式化代码的新的更好的解决方案了吗?
2014年

Answers:


133

不幸的是,Xcode的功能几乎不及VS或Jalopy for Eclipse。有一些不同的功能,例如将Structure > Re-Indent代码粘贴到源文件中时使用的自动格式设置。我完全和你在一起。这里绝对应该什么东西在那里帮助格式问题。


3
谢谢,至少我知道我没有丢失任何东西。自动识别确实可以减轻某些痛苦,但是我将不得不研究第三方解决方案。
jslatts

5
这不应该被选为答案。@ken下面的答案是正确的
Ryan Angilly

@RyanAngilly注意该问题回答的年份。从那时起,Xcode发生了许多变化。;-)
Marc W

1
@RyanAngilly ken仅描述了如何自动缩进。这并不是“格式”(带有空格和换行符的添加和删除等)的真正含义。
dergab 2015年

5
可以使用control-i固定缩进,该缩进将使所有选定的行缩进。
zaph 2015年

426

那是Ctrl+ i

或对于高科技含量较低的产品,先切割然后粘贴。它将重新粘贴格式。


谢谢!这很有用,特别是因为菜单实际上没有显示键盘快捷键。
jslatts

37
但这只是缩进。移动牙套,换行等如何处理?
Peter Ajtai 2012年

14
它不应该接受,因为它不能执行代码格式化程序可以处理的所有事情。它只是缩进,
powerj1984

1
好提示。la脚的是XCode没有此功能。
AndrewK

4
是@ powerj1984。我对此也感到失望。它不添加经过适当的空间,=或者其他经营者。它的目的只是意图。没有其他的。Mac确实需要在这里向Microsoft学习。
shashwat 2014年

35

我想推荐两个值得考虑的选择。两者都是相当新的并且不断发展。

ClangFormat-Xcode(免费)-每个cmd + s文件上的格式都重新格式化为特定样式并保存,易于在团队内部署

一个Xcode插件,使用@travisjeffery使用Clang的格式化工具来格式化代码。

使用clang-format,您可以使用Clang将代码格式化为LLVM,Google,Chromium,Mozilla,WebKit或您自己的配置等样式。

Objective-Clean(付费,尚未尝试)-如果违反了预定义的样式规则,则应用会引发构建错误-在团队内部可能很难使用,因此我没有尝试。

只需极少的设置,您就可以让Xcode使用我们的应用来执行您的规则。如果您被发现违反了其中一项规则,则Xcode会抛出构建错误并将您带到违规行。


如何使用此插件创建自己的格式配置?
nbro 2014年

26

在xcode中,您可以使用此快捷方式重新缩进源代码

转到具有缩进问题的文件,然后执行以下步骤:

  • Cmd+ A选择所有源代码

  • Ctrl+ I重新缩进

希望这可以帮助。


18

我个人最喜欢的PrettyC wantabe尚未解密:http ://uncrustify.sourceforge.net/ 。它有数十亿个选项,因此我也建议您下载UniversalIndentGUI_macx(也在sourceforge上),有人编写了一个GUI来帮助您按照自己喜欢的方式设置选项。

然后,您可以添加此自定义用户脚本,以使选定的文本恢复原状:

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

我遇到了无法复原的问题,尤其是格式化块。
利隆

12

您可以使用Command+ A选择所有内容,然后使用Ctrl+ I格式化所选内容。



8

Cmd A + Ctrl I

Cmd A然后右键单击。转到结构->重新缩进


6

考虑为自己购买AppCode的许可证,AppCode是可帮助iOS / OS X开发人员的智能Objective-C IDE。AppCode与Xcode完全兼容,但在添加强大功能方面超越了Xcode 。

AppCode JetBrainsIntellij IDEA IDE 的Objective-C变体。他们还是Visual Studio 受欢迎的ReSharper扩展的作者,从这里开始的主要目的似乎是为了将IDEA体验带给Microsoft产品的绝望尝试。

AppCode使用其自己的代码分析器,该分析器可提供近乎完美的重构和代码导航支持。还可以重新缩进代码并完全重新格式化代码(尽管在困难的情况下我仍然会丢失一些格式设置,但大多数情况下效果很好)。

您当然可以尝试试用版。



4

您可以尝试使用XCode插件https://github.com/benoitsan/BBUncrustifyPlugin-Xcode

只需克隆github仓库,在XCode中打开插件项目并运行它。它会自动安装。在使用格式化程序插件之前,请重新启动Xode。

不要忘记之前安装uncrustify util。自制,例如

brew install uncrustify

PS可以在“编辑”>“格式代码”>“ BBUncrustifyPlugin首选项”>“保存时格式化”中启用“保存后格式化”功能

希望这对您有用;-)



3

CTRL + i

而已。

(否COMMAND+ i


6
该答案已被提及4次-请在回答之前阅读其他答案。
fishinear 2015年

另外,CMD + i与转到产品->配置文件相同,与格式不同。
inga

3

我建议使用ClangFormat。为了安装,请按照下列步骤操作:

  1. 安装用于XCode的Alcatraz软件包管理器,支持Xcode 5+和OS X 10.9+
  2. 安装后,重新启动XCode。
  3. 打开XCode->窗口菜单->程序包管理器
  4. 搜索(查找)ClangFormat并安装它。重新安装后,重新启动XCode。
  5. 现在,在XCode菜单中,您可以使用Edit-> Clang Format子菜单进行格式化。

您可以选择不同类型的格式。同样,通过启用“保存时格式化”,您可以获得自动格式化功能。

在此处输入图片说明


1
这是不再提供的XCode 8+
弥敦道F.

是的,您是正确的@NathanFiscaletti我已经从7.2升级到9.2及以上版本,解决方案不再起作用。但是我找到了解决方案。我将添加一个新帖子!
csonuryilmaz

我安装了Alcatraz,但Xcode 9不再支持ClangFormat插件。github.com/travisjeffery/ClangFormat-Xcode/issues/129
csonuryilmaz

1

如果您的Xcode版本是3.x,则应在Uncrustify中使用“用户脚本” ,此处为示例:

#!/bin/sh

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

将以上内容添加到您的Xcode“用户脚本”中。

如果Xcode版本是4.x,我认为您应该阅读此博客:Xcode 4中的代码格式

这样,使用了“ Apple Services”,但是它不够好,导致体验太慢,有人有同样的想法吗?

苹果为什么要删除“用户脚本” .... xD


1

首先,检查XCode首选项“缩进”部分。您可以在那里自定义很多东西...

有关更细粒度的控制,请参阅Apple 的XCode User Defaults文档。(可能需要开发者登录才能查看)。例如,我可以通过在终端中输入以下内容来禁用“粘贴时缩进”:

defaults write com.apple.XCODE PBXIndentOnPaste No

读回您的设置:

defaults read com.apple.XCODE PBXIndentOnPaste

1

这仅适用于未划定空格的语言,但我的解决方案是删除空格以外的所有空格,然后在通常划定EOL的字符后添加换行符(例如,将';'替换为'; \ n'),然后再无处不在^ + i解决方案。

我使用Python。

示例代码,只需替换文件名:

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

它不是完美的(例如:for循环),但是我喜欢它。


1

我们可以使用Xcode Formatter,它使用uncrustify轻松地格式化您的源代码,就像您的团队真正想要的那样!

安装推荐的方法是克隆GitHub项目或从https://github.com/octo-online/Xcode-formatter下载它并在Xcode项目中添加CodeFormatter目录,以获取:基于Xcode快捷方式的代码格式:在当前工作空间中格式化修改后的源代码自动代码格式化:当应用程序构建所有源代码时,在项目中添加一个构建阶段以格式化当前源代码格式化:使用一个命令行格式化所有代码您的项目共享的格式化规则:编辑并使用相同的配置项目开发团队的文件1)如何为您的项目设置代码格式化程序安装uncrustify最简单的方法是使用brew:$ brew install uncrustify

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

检查uncrustify是否位于/ usr / local / bin $中

如果您的Unrustify版本低于0.60,则可能必须手动安装它,因为最近已添加了现代Objective-C语法。在您的.xcodeproj文件旁边添加CodeFormatter目录

检查您的Xcode应用程序是否命名为“ Xcode”(默认名称)。您可以在Applications /目录(或自定义Xcode安装目录)中看到此名称。如果您的Mac上有多个Xcode实例,请小心:确保项目的实例实际上被命名为“ Xcode”!(为什么?此名称用于查找当前打开的Xcode文件。请参见CodeFormatter / Uncrustify_opened_Xcode_sources.workflow appleScript)。安装自动服务Uncrustify_opened_Xcode_sources.workflow将此文件复制到〜/ Library / Services /文件夹(如果需要,请创建此文件夹)。请小心:双击.workflow文件,将其安装,但该文件将被删除!确保将其副本留给其他用户。

在构建项目时如何格式化打开的文件添加包含以下行的构建阶段“运行脚本”:

sh CodeFormatter / scripts / formatOpendSources.sh

如何在命令行中格式化文件

要格式化当前打开的文件,请使用formatOpenedSources.sh:

$ sh CodeFormatter / scripts / formatOpendSources.sh

要格式化所有文件,请使用formatAllSources.sh:

$ sh CodeFormatter / scripts / formatAllSources.sh PATH

PATH必须替换为您的源路径。

例如; 如果项目名称为TestApp,则命令为

$ sh CodeFormatter / scripts / formatAllSources.sh TestApp

它将查找项目中的所有文件,并按照uncrustify_objective_c.cfg文件中的配置格式化所有文件。

如何更改格式化程序的规则

编辑CodeFormatter / uncrustify_objective_c.cfg,使用TextEdit打开


0

好吧,我正在寻找一种简单的方法。并找出中等

首先复制json文本,并在jsonlint或类似的东西上进行验证。然后要从jsonlint复制,已经对json进行了格式化。并粘贴在Xcode中代码保存格式,快捷键shift+ option+ command+v


-1

您可以在以下路径中查看和更改任何快捷方式:Xcode-> Preferences-> Key Bindings。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.