【问题标题】:How to get clang format for Xcode 8?如何获得 Xcode 8 的 clang 格式?
【发布时间】:2022-01-16 19:06:04
【问题描述】:

在 Xcode 更新到版本 8 后。非常有用的 Alcatraz PlugIn Manager 被锁定,并且诸如 clang-format 或突出显示选定的单词出现,或使用快捷方式调整字体大小等一流的实用程序都消失了。

如何重新启用 clang-format 以在保存时使用源文件的任何父目录中的模板 .clang-format 格式化我当前的源代码文件?

【问题讨论】:

    标签: xcode plugins clang-format


    【解决方案1】:

    您可以创建一个 shell 脚本作为行为添加到 Xcode 8:Xcode > 行为 > +(创建新的)> 运行脚本:(在此处选择文件),添加快捷方式,如 Cmd+Shift+S。

    脚本要求 Xcode 保存当前文档。然后它提取其文件路径并调用 clang-format 以就地格式化该文件。 Clang 格式必须可用,例如通过使用 brew 作为包管理器来下载它并发布其路径以供命令行访问。像往常一样,clang-format 使用的样式指南必须具有名称 .clang-format 并且必须位于源文件的任何父文件夹中。

    这是脚本:

    #!/bin/bash
    
    CDP=$(osascript -e '
    tell application "Xcode"
        activate
        tell application "System Events" to keystroke "s" using {command down}
        --wait for Xcode to remove edited flag from filename
        delay 0.3
        set last_word_in_main_window to (word -1 of (get name of window 1))
        set current_document to document 1 whose name ends with last_word_in_main_window
        set current_document_path to path of current_document
        --CDP is assigned last set value: current_document_path
    end tell ')
    
    LOGPATH=$(dirname "$0")
    LOGNAME=formatWithClangLog.txt
    echo "Filepath: ${CDP}" > ${LOGPATH}/${LOGNAME}
    sleep 0.6 ### during save Xcode stops listening for file changes
    /usr/local/bin/clang-format -style=file -i -sort-includes ${CDP} >> ${LOGPATH}/${LOGNAME} 2>&1
    
    # EOF
    

    请将路径 /usr/local/bin 交换为您的 clang 格式可执行文件所在的路径。

    编码愉快!

    【讨论】:

      【解决方案2】:

      mapbox/XcodeClangFormat 扩展看起来是让 clang 格式与 Xcode8 一起使用的一种很有前途的方法。

      由于源代码编辑器扩展的限制,很遗憾您只能为所有项目指定一个 .clang 格式的文件。 “保存时格式化”也不可用。

      【讨论】:

      • 我对此进行了测试,它在新 Xcode 插件模型的严格限制下可以做到。我缺少的是“保存时的格式”,根据其作者,这是不可能的。但对于 clang 格式插件来说,这是一个尽可能接近的选项。
      • @VisorZ,也许有一种方法可以将 osascript 和这个插件结合起来,以便通过按下触发插件的clang-format 按钮的自动化来覆盖命令 Command+S?
      【解决方案3】:

      在此博客中找到了可行的解决方案 - code-beautifier-in-xcode

      基本上,我们可以让clang-format 由自动机作为服务运行,并在需要格式化代码时通过 Xcode 调用它。有关详细信息,请参阅博客。

      【讨论】:

        【解决方案4】:

        不幸的是,您的小脚本通常不会更新 Xcode 中的格式化文件,因为它在保存时停止侦听文件更新。增加脚本中的睡眠持续时间不会使其更可靠,并且会为常见的文件保存和文件格式操作引入大量等待时间。

        在您的情况下,我所做的是获取我的 mac 备份并将 macOS 和 Xcode 恢复到上一个​​版本,其中所有来自 Alcatraz 的生产力插件都可以再次正常工作。这提高了我的工作效率。

        【讨论】:

          【解决方案5】:

          看起来 Alcatraz 插件在取消签名后可以在 Xcode 8+ 中恢复工作。因为我没有条件尝试,我只能向您指出该资源:

          检查该 github 页面 ClangFormat-Xcode 上的标题 Installation

          【讨论】:

          • 我在更新到 Xcode 9.2 后尝试过。我使用工具 update_xcode_plugins 在 ClangFormat-Xcode github 页面上描述了我的 Xcode 未签名。所有其他 alcatraz 插件再次工作,但 ClangFormat 插件不起作用。我的解决方案是使用上面的脚本,删除保存功能和延迟条目,并通过 Xcodes Behaviours 将其绑定到快捷方式。现在我先按 CMD+S,然后是在当前文件上外部应用 clangformat 的快捷方式。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-28
          • 2015-07-03
          • 2017-02-06
          相关资源
          最近更新 更多