【问题标题】:Xcode source automatic formattingXcode源码自动格式化
【发布时间】:2025-12-21 08:05:12
【问题描述】:

作为一名 C# 开发人员,我已经高度依赖 Visual Studio 2008 中的自动格式化。具体来说,我将使用 CTRL + K , D 键盘快捷键在我草率的实施后强制事情恢复原状。

我现在正在尝试学习 Objective-C 并且缺少 Xcode 中的某些功能,但可能没有一个比格式化快捷方式更痛苦。我的谷歌搜索没有产生任何内置的东西,虽然似乎有一些黑客。我是否遗漏了什么,或者 Xcode 中不存在此功能?

【问题讨论】:

标签: xcode formatting keyboard-shortcuts


【解决方案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 是来自 JetBrainsIntellij 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】:

                CTRL + i

                就是这样。

                (没有命令 + i

                【讨论】:

                • 这已被提及 4 次作为答案 - 请在回答之前阅读其他答案。
                • 另外,CMD+i 和去 Product -> Profile 一样,和格式化不一样。
                【解决方案13】:

                斯威夫特 - https://github.com/nicklockwood/SwiftFormat

                它提供 Xcode 扩展以及 CLI 选项。

                【讨论】:

                  【解决方案14】:

                  我建议使用 ClangFormat。要安装,请按照以下步骤操作:

                  1. 为 XCode 安装 Alcatraz 包管理器 支持 Xcode 5+ & OS X 10.9+
                  2. 安装后重启 XCode。
                  3. 打开 XCode -> 窗口菜单 -> 包管理器
                  4. 搜索(查找)ClangFormat 并安装它。再次安装后重新启动 XCode。
                  5. 现在在 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

                          【讨论】: