如何获得Xcode 8的clang格式?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获得Xcode 8的clang格式?相关的知识,希望对你有一定的参考价值。

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

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

答案

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

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

另一答案

您可以创建一个作为行为添加到Xcode 8的shell脚本:Xcode> Behaviors> +(创建新的)> Run script :(在此处选择文件),添加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格式可执行文件所在的路径。

快乐的编码!

另一答案

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

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

另一答案

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

我在你的情况下做的是获得我的mac备份并将macOS和Xcode恢复到最后一个版本,其中Alcatraz的所有生产力插件再次正常工作。这提高了我的生产力。

另一答案

看起来Alcatraz插件在取消签名时可以重新使用Xcode 8+。因为我不是在尝试这种情况,所以我只能指出你的资源:

检查github页面上的标题安装ClangFormat-Xcode

以上是关于如何获得Xcode 8的clang格式?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 中配置 clang-format 格式化 C++ 代码

在Xcode中使用Clang Format

如何使用 xcode 将快照划分为多个片段,以便让用户与每个片段进行交互?

Xcode 8 用处不大的新特性:CLANG_WARN_INFINITE_RECURSION

为啥我的 Xcode 插件(如 clang 格式)在更新到新版本的 Xcode 后不再工作了?

使用Xcode开发iOS语法检查的Clang插件