zhscn
1
我当前项目的 C++ 代码缩进风格比较独特,以如下片段为例:
return cache->get_extent_if_cached(t, addr, type
).si_then([this, FNAME, &t, type, addr, laddr, len](auto extent)
// 上一行的 ) 保持要和当前同一级缩进保持一致
-> get_extent_if_live_ret {
if (extent) {
return get_extent_if_live_ret (
interruptible::ready_future_marker{},
extent);
// 函数调用的参数数量较多时换行,缩进一级
}
现在用 emacs 写代码时的行为:
return cache->get_extent_if_cached(t, addr, type
) // 回车后自动和括号对齐
// 自动缩进问题:
return get_extent_if_live_ret (
interruptible::ready_future_marker{}
// 键入 , 后自动缩进
return get_extent_if_live_ret (
interruptible::ready_future_marker{},
现在我想取消键入 ,
()
::
产生的自动缩进;回车、tab只缩进一级(两个空格)应该设置什么选项?
这是我开启的 minor mode:
Enabled minor modes: Abbrev Auto-Composition Auto-Compression
Auto-Encryption Company Company-Posframe Company-Prescient Eldoc
Electric-Indent File-Name-Shadow Font-Lock Gcmh Global-Auto-Revert
Global-Company Global-Eldoc Global-Font-Lock Global-Git-Commit
Global-Hl-Todo Hl-Todo Indent-Tabs Line-Number Lsp Lsp-Completion
Lsp-Diagnostics Lsp-Managed Lsp-Modeline-Workspace-Status Lsp-Ui
Marginalia Meow Meow-Global Meow-Normal Persp Prescient-Persist
Savehist Shell-Dirtrack Show-Paren Show-Smartparens
Show-Smartparens-Global Smartparens Smartparens-Global
Straight-Package-Neutering Straight-Use-Package Tooltip Transient-Mark
Tree-Sitter Tree-Sitter-Hl Vertico Which-Key Windmove
1 个赞
看起来像是google style, 先按google的格式化看看,和你以前代码有多少区别,稍微微调下吧
1 个赞
zhscn
3
别人不用 format 这边单独用了也不合适。。
缩进这么奇怪主要是因为 future 全是 return。印象中 google style 没有类似的规定。
{
return seastar::do_with(
bufferlist(),
[ctx, obj_offset, len](auto &ret) {
return with_object_data(
ctx,
[ctx, obj_offset, len, &ret](const auto &object_data) {
LOG_PREFIX(ObjectDataHandler::read);
laddr_t loffset =
object_data.get_reserved_data_base() + obj_offset;
return ctx.tm.get_pins(
ctx.t,
loffset,
len
).si_then([ctx, loffset, len, &ret](auto _pins) {
return seastar::do_with(
std::move(_pins),
loffset,
[ctx, loffset, len, &ret](auto &pins, auto ¤t) {
return trans_intr::do_for_each(
1 个赞
zhscn
4
简单调了调,应该是 electric indent 控制的自动缩进,cc mode 也有些变量。
如果使用 smartparens, 可以用下面的代码实现回车的的换行缩进
(use-package smartparens
:init
(smartparens-global-mode t)
:config
(sp-with-modes
'(c++-mode objc-mode c-mode)
(sp-local-pair "{" nil :post-handlers '(:add ("||\n[i]" "RET")))))
多人共同编辑的项目,最好大家约定统一代码规范,否则后面很难维护,可以提出大家一起改下
zhscn
7
积重难返了 整个项目 format 提交历史就乱掉了
确实,我一直想统一项目的 format,可惜一改 git blame 就失效。
1 个赞
zhscn
9
关掉 electric indent ,我看看 smartparens 的文档应该就能解决了
zhscn
10
我这边甚至 tab space 混用。。vscode缩进都显示不正确,只能 vim/emacs
zhscn
12
tab宽度8,缩进是 2 。vscode 不区分 tab 和 indent 。把 tab 设置为 8 显示正常但是回车默认 8 个缩进。
tab 设置为 2 回车缩进正确但是显示就错位了。
16年就有人提过这个但是一直没解决