在 CLion 中使用 clang 格式

Posted

技术标签:

【中文标题】在 CLion 中使用 clang 格式【英文标题】:Using clang-format in CLion 【发布时间】:2016-04-11 10:28:28 【问题描述】:

我想在 CLion 中使用 clang-format 格式化我的代码。我已经完成了设置,但没有找到任何允许我运行外部命令来转换代码的设置。这些事情在 CLion 中通常是如何完成的?

【问题讨论】:

相关CLion问题youtrack.jetbrains.com/issue/CPP-4805 【参考方案1】:

您可以在 CLion 中使用外部工具

转到File->Settings->Tools->External Tools 并点击加号。

应该会弹出一个窗口。使用您选择的名称。

对于Tool settings 选项卡,我正在使用此配置:

程序:clang-format-3.7(您应该在此处使用可执行文件的名称)

参数:-i $FileName$

工作目录:$FileDir$

现在,打开文件后,您可以转到 Tools->External tools 并运行上面的配置。它基本上调用 clang-format 并进行就地格式化。

您也可以为其设置自定义键盘映射,只需在“设置”菜单的“键盘映射”中搜索您的外部工具的名称即可。

【讨论】:

谢谢,这正是我想要的! 是否可以将其应用于所有文件? Clion 格式化选项指南是否有任何 clang 格式? @DuckQueen:clang-format 默认使用 LLVM 样式,但也可以使用其他样式。 CLion 支持大多数(如果不是全部)这些样式,您可以这样设置:twitter.com/clion_ide/status/758203475704635392 每当您保存文件时,我都在努力让 clang-format 运行。这些说明很有帮助:marcesher.com/2014/03/30/…【参考方案2】:

CLion 2019.1 的最新版本已原生支持 ClangFormat。

对于以前的版本,请转到 File->Preferences->Plugins 并搜索 ClangFormatIJ。安装这个插件。

它安装上下文菜单以调用本地安装的clang-format 来获取文件或选择。它还为“使用 clang-format 重新格式化当前语句”操作设置了快捷键。

这个选项在 CLion 218.3 中非常适合我,但是它也可能包含在早期版本中。

【讨论】:

ClangFormatIJ 超级慢...我的意思是当我按下代码格式的快捷方式时,有时需要 1-3 秒来更新代码...如果您在格式化过程中保存文件,它将破坏您的代码(剪切一些零件或其他奇怪的东西)。当您多次按下它时,它也会挂起 clion ......我认为是某种僵局。 Check for issues 可能取决于。我从来没有遇到过这个问题。好消息是每个人都可以期待在下一个版本中对 clang 格式的原生支持。这是一个已经计划好的任务CPP-4809【参考方案3】:

之前的答案效果很好,但不允许在保存时执行 clang-format 而不使用不适用于我正在使用的 Vim 仿真插件的解决方法。

这是一个在保存时执行 clang-format 的解决方案,并且在我遇到的每种情况下都能正常工作。

首先您需要安装File Watchers 插件。 从那里你需要去File->Settings->Tools->File Watchers并创建一个自定义模板

我使用以下设置在保存当前打开的文件之一时执行clang-format。您可以调整这些设置以满足您的需求

例如,如果您希望在文件更改时自动执行clang-format(无需保存),您可以启用Advanced Options->Auto-save edited files to trigger the watcher

File Watchers 插件的文档:https://www.jetbrains.com/help/clion/using-file-watchers.html

【讨论】:

【参考方案4】:

由于 CLion 191 EAP ClangFormat 是 supported from the box.

【讨论】:

感谢您的链接

以上是关于在 CLion 中使用 clang 格式的主要内容,如果未能解决你的问题,请参考以下文章

如何转储 CLion 的默认 clang-tidy 配置?

ubuntu下设置clion是使用clang和clang++

在clang格式中,惩罚有啥作用?

如何获得 Xcode 8 的 clang 格式?

如何获得Xcode 8的clang格式?

使用Clang格式化代码