有时clang格式会这样做:
SomeType VariableName[] = {Thing1,
Thing2,
Thing3}
Run Code Online (Sandbox Code Playgroud)
有时clang格式会这样:
SomeType VariableName[] = {
Thing1,
Thing2,
Thing3}
Run Code Online (Sandbox Code Playgroud)
并且单个字符更改可以使其在之间切换.
有没有办法控制它的作用?
我正在使用最新的git源代码构建,因此可以使用最新的选项.
问题:
E319:抱歉,此版本中没有该命令
问题
当我运行vim环境并尝试重新格式化代码(CTRL + K)时,我在屏幕上收到此警告
环境:
系统:Mac OS X
设置:
Vim:
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Nov 17 2016 20:17:27)
MacOS X (unix) version
Included patches: 1-91
Run Code Online (Sandbox Code Playgroud)
蟒蛇:
python --version: Python 3.5.2
Run Code Online (Sandbox Code Playgroud)
我所做的
我更新了.vimrc文件
从
map <C-K> :pyf .../clang-format.py<cr>
imap <C-K> <c-o>:pyf .../clang-format.py<cr>
到
map <C-K> ggVG :py3f .../clang-format.py<cr>
imap <C-K> <c-o>:py3f .../clang-format.py<cr>
我还更新了clang格式文件
https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format.py
谢谢,
我无法理解 clang-format 手册中的以下文本:
.clang-format file located in one of the parent
directories of the source file (or current
directory for stdin).
Run Code Online (Sandbox Code Playgroud)
“标准输入的当前目录”是什么意思?它是当前目录还是标准输入?
是否可以通过完整路径指定 .clang 格式的位置?
我希望任何长的for 循环都能自动分成三行;喜欢:
for (auto origin = backup_to_origins[peer].begin();
origin != backup_to_origins[peer].end();
origin++)
Run Code Online (Sandbox Code Playgroud)
但是 google 风格的 clang-format 将其格式化为两行:
for (auto origin = backup_to_origins[peer].begin();
origin != backup_to_origins[peer].end(); origin++)
Run Code Online (Sandbox Code Playgroud)
该BinPackArguments选项将每个 for 循环分成三行,包括短行,这不是我想要的。
基于线宽,我只希望占用超过X字符数量的循环被分成三行。<=X字符的循环,它们可以保留在一行上。我怎样才能做到这一点?
我注意到你可以做到这一点。
来自https://clang.llvm.org/docs/ClangFormatStyleOptions.html#
BCIS_BeforeComma(在配置中:BeforeComma)在冒号和逗号之前中断构造函数初始值设定项,并将逗号与冒号对齐。
得到以下效果
Constructor()
: initializer1()
, initializer2()
Run Code Online (Sandbox Code Playgroud)
我想同样能够打破
foo(a,b,c,d,e)
Run Code Online (Sandbox Code Playgroud)
到
foo
( a
, b
, c
, d
, e
);
Run Code Online (Sandbox Code Playgroud)
这可能吗?
C/C++的resharper 格式化程序似乎有这样一个选项。Prefer wrap before ","在页面上搜索。
我在LLVM 7.0.0中使用clang格式,在C++中使用Windows 10.
我有下课
class FooooooooooooooooooC
{
public:
FooooooooooooooooooC() = default;
const FooooooooooooooooooC& operator=( const FooooooooooooooooooC& ) = delete;
};
Run Code Online (Sandbox Code Playgroud)
并且在运行clang-format之后它应该是这样的
class FooooooooooooooooooC
{
public:
FooooooooooooooooooC() = default;
const FooooooooooooooooooC& operator=(
const FooooooooooooooooooC& ) = delete;
};
Run Code Online (Sandbox Code Playgroud)
但实际上它在运行clang-format后看起来像这样
class FooooooooooooooooooC
{
public:
FooooooooooooooooooC() = default;
const FooooooooooooooooooC&
operator=( const FooooooooooooooooooC& ) = delete;
};
Run Code Online (Sandbox Code Playgroud)
我的.clang格式的clang-fromat设置是
---
AccessModifierOffset: -3
AlignAfterOpenBracket: AlwaysBreak
AlignConsecutiveAssignments: true
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: false …Run Code Online (Sandbox Code Playgroud) 我想为我的所有项目使用相同的 clang 格式文件,因为我有多个。但是我不想在每个工作区中都有它们,而且我的主目录中已经有一个 clang 格式的文件,我该如何进行这项工作?或者这是不可能的?
我已经看到这个问题: 如何在每个工作区中配置没有 .clang-format 文件的 clang 格式?
但是我的 clang 格式文件大约有 80 行,我只想在家中本地编辑这些内容,而不必在 vscode 中进行更改。
IE浏览器,这个:
if (x > 5)
return test;
Run Code Online (Sandbox Code Playgroud)
总是会变成:
if (x > 5)
{
return test;
}
Run Code Online (Sandbox Code Playgroud)
我不是在谈论大括号样式(Allman、GNU、Whiteman 等),我只是说完全有大括号。
有一些东西可以防止/启用单行控制语句,例如:
if (x > 5) return test;
这是AllowShortBlocksOnASingleLine,但这不是我在这里寻找的东西。
如果它适用于 clang 7 那是理想的,但如果不是让我知道。
在我们的 C++ 项目中,包含的顺序会定期更改。这是一个问题,因为我们正在使用一些需要特定包含顺序的第三方库来避免问题。
我知道,这很糟糕,但我们必须处理它。
不幸的是,我们包含的顺序经常改变,我想这是由于clang-format. 我找到了一个页面,您可以在其中指定一个变量includeCategories。但是,我并不完全了解它是如何工作的。我只是想完全禁用包含的排序。我怎样才能做到这一点?
我正在寻找一种使用 clang-format(版本 9.0.0)格式化下面的 C++ 代码的方法,这样超过 80 列限制的函数定义在参数声明而不是 C++ 函数限定符之后被破坏,例如noexcept:
void scheduler::stop_mark(service ¤t, service const &stopped) const
noexcept {
// ...
}
Run Code Online (Sandbox Code Playgroud)
上面的代码片段显示了我使用LLVM默认样式格式化的代码,下面的代码是我在正确格式化后想要的代码:
void scheduler::stop_mark(service& current,
service const& stopped) const noexcept {
// ...
}
Run Code Online (Sandbox Code Playgroud)
两个片段之间的区别在于,该行在 之后service& current,而不是 之后被断开noexcept。
使用LLVM默认样式时,此行为可重现,但我使用以下选项作为参考:
---
BasedOnStyle: LLVM
AlignAfterOpenBracket: Align
AllowAllArgumentsOnNextLine: 'true'
AllowAllConstructorInitializersOnNextLine: 'true'
AllowAllParametersOfDeclarationOnNextLine: 'true'
AllowShortCaseLabelsOnASingleLine: 'false'
AllowShortFunctionsOnASingleLine: Empty
AllowShortLambdasOnASingleLine: Empty
AlwaysBreakTemplateDeclarations: 'Yes'
BinPackArguments: 'true'
BinPackParameters: 'true'
BreakConstructorInitializers: BeforeComma
BreakConstructorInitializersBeforeComma: 'true'
ConstructorInitializerIndentWidth: 2
FixNamespaceComments: 'true' …Run Code Online (Sandbox Code Playgroud) clang-format ×10
c++ ×7
clang ×2
llvm ×2
braces ×1
c ×1
curly-braces ×1
include ×1
macos ×1
vim ×1