Xcode源码自动格式化
Posted
技术标签:
【中文标题】Xcode源码自动格式化【英文标题】:Xcode source automatic formatting 【发布时间】:2010-12-07 03:14:05 【问题描述】:作为一名 C# 开发人员,我已经高度依赖 Visual Studio 2008 中的自动格式化。具体来说,我将使用 CTRL + K , D 键盘快捷键在我草率的实施后强制事情恢复原状。
我现在正在尝试学习 Objective-C 并且缺少 Xcode 中的某些功能,但可能没有一个比格式化快捷方式更痛苦。我的谷歌搜索没有产生任何内置的东西,虽然似乎有一些黑客。我是否遗漏了什么,或者 Xcode 中不存在此功能?
【问题讨论】:
SO question的答案中有一些很好的 Xcode 脚本解决方案链接 感谢您的链接。我也确实找到了这个:blog.carbonfive.com/2009/08/iphone/code-formatting-in-xcode 它涵盖了与您的链接基本相同的技术。我会试一试,看看效果如何。 使用 UniversalIndentGUI 的第三方解决方案:blog.carbonfive.com/2009/08/iphone/code-formatting-in-xcode 类似于这个问题;答案有菜单项和重新缩进代码的键盘快捷键:***.com/questions/3558709/… 在过去的 5 年里,Apple 在这方面有什么创新吗?这个问题是否仍然相关,或者 XCode 现在是否是格式化代码的新的更好的解决方案? 【参考方案1】:那是 Ctrl + i。
或者对于低技术,剪切然后粘贴。它会在粘贴时重新格式化。
【讨论】:
谢谢!这很有帮助,尤其是因为菜单实际上并没有显示键盘快捷键。 但这只是缩进。移动大括号、处理换行符等怎么样? 它不应该被接受,因为它不能执行代码格式化程序可以处理的所有事情。它只是重新缩进, 好提示。 XCode 没有这个的额外蹩脚。 是的@powerj1984。我也对此感到失望。它不会在,
、=
或其他运算符之后添加适当的空格。它的作用只是意图。没有其他的。 Mac 在这里确实需要向微软学习。【参考方案2】:
不幸的是,Xcode 没有任何可用的 VS 或 Jalopy for Eclipse 那样广泛。有一些不同的功能,例如Structure > Re-Indent
以及将代码粘贴到源文件时使用的自动格式化。不过,我完全支持你;肯定应该有一些东西可以帮助解决格式问题。
【讨论】:
谢谢,至少我知道我没有遗漏什么。自动识别确实有助于减轻一些痛苦,但我将不得不研究第三方解决方案。 不应选择此作为答案。 @ken 下面的答案是正确的 @RyanAngilly 请注意回答此问题的年份。从那时起,Xcode 发生了许多变化。 ;-) @RyanAngilly ken 只描述了如何自动缩进。这不是“格式”(带有空格和换行符添加和删除等)的真正含义。 可以使用 control-i 来修复缩进,这将缩进所有选定的行。【参考方案3】:我想推荐两个值得考虑的选项。都是全新的和不断发展的。
ClangFormat-Xcode(免费)- 将每个 cmd+s 文件重新格式化为特定样式并保存,便于团队内部部署
一个 Xcode 插件,用于使用 Clang 的格式化工具格式化您的代码,通过 @travisjeffery。
使用 clang-format,您可以使用 Clang 将您的代码格式化为如下样式 作为 LLVM、Google、Chromium、Mozilla、WebKit 或您自己的配置。
Objective-Clean(付费,尚未尝试) - 如果违反预定义的样式规则,应用程序会引发构建错误 - 可能很难在团队中使用,所以我没有尝试。
只需极少的设置,您就可以让 Xcode 使用我们的应用程序来执行 你的规则。如果你被发现违反了你的规则之一,Xcode 将引发构建错误并将您带到违规行。
【讨论】:
如何使用这个插件创建自己的格式配置?【参考方案4】:在 xcode 中,您可以使用此快捷方式重新缩进您的源代码
转到存在缩进问题的文件,然后按照以下步骤操作:
Cmd + A 选择所有源代码
Ctrl + I 重新缩进
希望这会有所帮助。
【讨论】:
【参考方案5】:我个人最喜欢的 PrettyC wantabe 是 unrustify: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%%%"
【讨论】:
我遇到了 uncrustify 的问题,尤其是格式化块。【参考方案6】:您可以使用 Command + A 选择所有内容,然后使用 Ctrl + I 格式化所选内容内容。
【讨论】:
【参考方案7】:我也觉得xcode应该有这个功能。 所以我做了一个扩展:Swimat
brew cask install swimat
的简单安装
你可以试试看,更多信息请见https://github.com/Jintin/Swimat。
【讨论】:
【参考方案8】:Cmd A + Ctrl I
或 Cmd A 然后右键单击。转到 结构 -> 重新缩进
【讨论】:
【参考方案9】:考虑为自己购买AppCode 的许可证,这是一个智能的 Objective-C IDE,可帮助 ios/OS X 开发人员。 AppCode 与 Xcode 完全兼容,但在 Xcode 之外添加了powerful features。
AppCode 是来自 JetBrains 的 Intellij IDEA IDE 的 Objective-C 变体。他们也是 Visual Studio 的流行 ReSharper 扩展的作者,从这里来看,其主要目的似乎是为 Microsoft 产品带来一些 IDEA 体验的绝望尝试。
AppCode 使用自己的代码分析器,它提供了近乎完美的重构和代码导航支持。还可以重新缩进和完全重新格式化代码(尽管在困难的情况下我仍然缺少一些格式设置,但大多数情况下效果很好)。
当然,您可以尝试试用版。
【讨论】:
【参考方案10】:您还可以查看https://github.com/octo-online/Xcode-formatter,它是基于 Uncrustify 并集成到 Xcode 中的格式化程序。像魅力一样工作。
【讨论】:
【参考方案11】:你可以试试那个XCode插件https://github.com/benoitsan/BBUncrustifyPlugin-Xcode
只需克隆 github 存储库,在 XCode 中打开插件项目并运行它。它将自动安装。在使用格式化插件之前重启 Xode。
不要忘记之前安装 uncrustify util。自制,例如
brew install uncrustify
附:您可以在 Edit > Format Code > BBUncrustifyPlugin Preferences > Format On Save 处打开“保存格式后”功能
希望这对你有用;-)
【讨论】:
【参考方案12】:斯威夫特 - https://github.com/nicklockwood/SwiftFormat
它提供 Xcode 扩展以及 CLI 选项。
【讨论】:
【参考方案13】:CTRL + i
就是这样。
(没有命令 + i)
【讨论】:
这已被提及 4 次作为答案 - 请在回答之前阅读其他答案。 另外,CMD+i 和去 Product -> Profile 一样,和格式化不一样。【参考方案14】:我建议使用 ClangFormat。要安装,请按照以下步骤操作:
-
为 XCode 安装 Alcatraz 包管理器
支持 Xcode 5+ & OS X 10.9+
安装后重启 XCode。
打开 XCode -> 窗口菜单 -> 包管理器
搜索(查找)ClangFormat 并安装它。再次安装后重新启动 XCode。
现在在 XCode 菜单中,您可以使用 Edit -> Clang Format 子菜单进行格式化。
您可以选择不同类型的格式。此外,通过启用保存时格式化,您可以获得自动格式化功能。
【讨论】:
XCode 8+ 不再提供此功能 是的,你是对的@NathanFiscaletti 我已经从 7.2 升级到 9.2 及更高版本的解决方案不再工作了。但我找到了解决方案。我会添加一个新帖子! 我安装了 Alcatraz 但 Xcode 9 不再支持 ClangFormat 插件。 github.com/travisjeffery/ClangFormat-Xcode/issues/129【参考方案15】:如果你的 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,我认为你应该阅读这篇博客:Code Formatting in Xcode 4,
这样,用了“Apple Services”,但是不够好,导致体验太慢,有没有人有同样的情况?
为什么苹果放弃“用户脚本”....xD
【讨论】:
【参考方案16】:首先,检查 XCode 首选项“缩进”部分。你可以在那里自定义很多东西......
有关更细粒度的控制,请参阅 Apple 的 XCode User Defaults 文档。 (可能需要开发人员登录才能查看)。例如,我可以通过在终端中输入以下内容来禁用“粘贴缩进”:
defaults write com.apple.XCODE PBXIndentOnPaste No
回读您的设置:
defaults read com.apple.XCODE PBXIndentOnPaste
【讨论】:
【参考方案17】:这仅适用于没有空格划定的语言,但我的解决方案是删除除空格以外的所有空格,然后在通常描绘 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 循环),但我喜欢它。
【讨论】:
【参考方案18】:我们可以使用 Xcode Formatter,它使用 uncrustify 轻松格式化您的源代码,就像您的团队完全希望的那样!。
安装 推荐的方法是克隆 GitHub 项目或从https://github.com/octo-online/Xcode-formatter 下载并在您的 Xcode 项目中添加 CodeFormatter 目录以获取: Xcode 基于快捷方式的代码格式化:在当前工作空间中格式化修改的源代码的快捷方式 自动代码格式化:在您的项目中添加构建阶段以在应用程序构建时格式化当前源代码 所有源格式:使用一个命令行格式化所有代码 项目共享的格式规则:与项目开发团队编辑并使用相同的配置文件 1) 如何为您的项目设置代码格式化程序 安装 unrustify 最简单的方法是使用brew: $ brew install uncrustify
要安装 brew: $ ruby –e “$(curl –fsSkl raw.github.com/mxcl/homebrew/go)”
检查 uncrustify 是否位于 /usr/local/bin $ 不结皮
如果您的 uncrustify 版本低于 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 必须替换为您的源路径。
E:g;如果项目名称是 TestApp 那么命令将是
$sh CodeFormatter/scripts/formatAllSources.sh TestApp
它将查找项目中的所有文件,并将按照 uncrustify_objective_c.cfg 文件中的配置格式化所有文件。
如何更改格式化程序的规则
使用 TextEdit 打开编辑 CodeFormatter/uncrustify_objective_c.cfg
【讨论】:
【参考方案19】:嗯,我正在寻找一种简单的方法。并在medium 上查找。
首先复制 json 文本并在 jsonlint 或类似的东西上验证它。然后从 jsonlint 复制,已经格式化了 json。并将代码粘贴到 Xcode 上并保留格式,快捷键 shift + option + command + v
【讨论】:
以上是关于Xcode源码自动格式化的主要内容,如果未能解决你的问题,请参考以下文章