具有模板参数的 return 类型的 C++ lambda 函数的 CC 模式缩进

CC-mode indentation of C++ lambda functions with a return type that has template parameters

我在 Ubuntu 20.04 上使用 apt 安装的 Emacs 中使用 CC 模式。 它格式化代码如下:

#include <vector>
int main() {
  auto f1 = [](int a) {
              return std::vector<int>({a});
            };
  auto f2 = [](int a) -> std::vector<int> {
                                           return std::vector<int>({a});
  };
}

在我看来,f1 的格式可以接受,但 f2 不行。有没有办法 让它像 f1 一样格式化 f2?或者,更优选地,如下所示, 这是通过 Ubuntu 16.04.

上安装的 CC 模式实现的
#include <vector>
int main() {
  auto f1 = [](int a) {
    return std::vector<int>({a});
  };
  auto f2 = [](int a) -> std::vector<int> {
    return std::vector<int>({a});
  };
}

我目前的解决方法如下,但并不理想:

  using vector_t = std::vector<int>;
  auto f2wa = [](int a) -> vector_t {
                return vector_t({a});
              };

如果您使用来自 melpa 的 google-set-c-style.el,您将获得您喜欢的格式,

#include <vector>
int main() {
  auto f1 = [](int a) {
    return std::vector<int>({a});
  };
  auto f2 = [](int a) -> std::vector<int> {
    return std::vector<int>({a});
  };
}

一般来说,使用 cc-modes,您可以尝试 c-guess 检查和设置样式规则,直到找到您想要的。