【问题标题】:How to enforce maximum line length in Emacs?如何在 Emacs 中强制执行最大行长?
【发布时间】:2009-04-07 01:39:14
【问题描述】:

在 Emacs 中,我如何强制规定最大行长度,例如 80 个字符?我希望它在我的代码中插入正确的换行符,就像 fill-paragraph 用于文本一样,如果可能的话,正确插入行的第二部分。

这里有一个小例子:

LongNameType<PrettyLong, AlsoLong> doSomethingWithLongFunctionName(int a, int b);
foo();

如果我真的这样做了fill-paragraph,它会变成:

LongNameType<PrettyLong, AlsoLong>
doSomethingWithLongFunctionName(int a, int b); foo();

而我更喜欢这个:

LongNameType<PrettyLong, AlsoLong>
  doSomethingWithLongFunctionName(int a, int b);
foo();

【问题讨论】:

  • 好主意! +1,我总是尝试在 VS 中保持 100 个字符/行,以便我可以始终以相同大小的窗口看到我的代码。自动化的工具会很酷。

标签: emacs lisp code-formatting


【解决方案1】:

有一个number of packages 会警告您行长度限制。就个人而言,我使用wide-column,它会根据当前列更改光标颜色。

【讨论】:

  • 它没有回答问题。请提供明确的解决方案,以强制在到达 x 时插入换行符(换行符),否则不要混淆。
  • @bedbad 没有人“回答这个问题”,因为(显然)该解决方案(显然)不存在于 Emacs 中。然而,每一个回答都试图给弗兰克一些可能对他有帮助的东西。请添加建设性的反馈 - 我们是一个建立人的社区,而不是拆毁他们。我怀疑有人对我的答案(或其他答案)感到“困惑”,因为没有人提供误导人们的答案。
  • 我认为您的回答与问题无关。您应该在 SO 问题中回答一个问题,而不是“可能对某些人有用”的问题,因为它存在于许多寻求答案的人中。即使你帮助了 1 也会让一大群人感到困惑
  • 而且我的答案与这个问题的其他答案不同,如何?我没有看到你评论他们的。您可以认为答案与问题无关,但我会反驳说其他两个答案具有相同的风格,并且它们也被赞成(此时没有反对票,很惊讶你没有反对鉴于你的立场。哦,这是 b/c,你太新了,你没有那种特权。我等待反对票。)。把你的精力投入到为此编写一个可行的解决方案上,我会给你 500 点赏金。那么世界会变得更美好。
【解决方案2】:

fill-paragraph 和 auto-fill-mode 故意不包装代码。有太多的方法可以做到这一点,它可能会出错。他们会包装 cmets,但这对你没有帮助。

我曾经做过的唯一方法是明确地将我希望文本中断的位置。然后自动缩进应该把虚线放在正确的位置。

您是否要重排大量现有代码?或者尝试对您正在编写的代码进行自动填充工作?

【讨论】:

  • 但我希望 C++ 模式能够重新定义填充段落,以便它实际上为 C++ 做正确的事情。这并不比其他 C++ 模式实现更难。是的,理想情况下我想更改我的完整代码。而且,我希望它用于我在 Emacs 中编写的新代码。
  • 我认为这更难,因为换行的方法比缩进的方法多得多。很多时候,在 80 列标记处(或任何地方)中断并不是布置代码的最佳选择(您是否在每个参数之后中断,例如在一长串参数中)。
  • 我认为你只是在限制前的最后一个逗号之后中断。可能有一些例外,但这应该是主要规则。
【解决方案3】:

不是真正的 emacser,但是如果你在 c++-mode 中打开 auto-fill-mode 会发生什么?

C++ 模式应该给你自动缩进,而自动填充模式给你换行......

【讨论】:

    【解决方案4】:

    我使用modeline-posn 包。如果它大于指定值,它会突出显示模式行中的列号。

    【讨论】:

      【解决方案5】:

      您应该查看 Emacs 的许多“垂直线”库之一。有些库始终在整个缓冲区上保留一条垂直突出显示线(不是您真正想要的),但其他库始终将垂直突出显示放在修复列上,这并不是您真正想要的,但您可以立即看到当你应该换行时。

      【讨论】:

        【解决方案6】:

        试试

        '(c-max-one-liner-length 80)
        
        '(fill-column 80)
        '(c-ignore-auto-fill (quote (string cpp)))
        

        希望对你有帮助。

        【讨论】:

          【解决方案7】:

          您可以使用更高级的clang-format 包。

          • 您必须安装 clang-fromat 及其 emacs 包。
          • 将此添加到您的 .emacs (setq clang-format-style "file") 或添加到 custom-set-variables '(clang-format-style "file")
          • 通过clang-format -style=gnu -dump-config &gt; .clang-format 生成模板样式,然后放入项目的根目录中。
          • 根据需要自定义 .clang 格式并将 ColumnLimit: 120 更改为 80 或您想要的任何值。

          这将使用 clang-format 工具强制列限制。

          参考: ClangFormatStyleOptions. Related question

          【讨论】:

            猜你喜欢
            • 2014-04-01
            • 2021-10-21
            • 2011-02-16
            • 2018-03-06
            • 2017-03-01
            • 2020-01-09
            • 1970-01-01
            • 1970-01-01
            • 2014-11-01
            相关资源
            最近更新 更多