如何在Emacs中强制执行最大行长度?

时间:2009-04-07 01:39:15

标签: emacs lisp code-formatting

在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();

7 个答案:

答案 0 :(得分:5)

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

我做过的唯一方法是明确地将文本放在我想要的地方。然后自动缩进应该将虚线放在正确的位置。

您是否正在尝试重排大量现有代码?或者尝试自动填写你正在编写的代码?

答案 1 :(得分:5)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

您应该查看Emacs的众多“垂直线”库中的一个。有些人总是在整个缓冲区上保持垂直高亮线(不是你真正想要的),但是其他库总是将垂直高光放在修复列上,这不是你想要的,但你可以立即看到当你应该包装线时。

答案 4 :(得分:0)

不是真正的emacser,但是如果你在auto-fill-mode期间开启c++-mode会怎样?

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

答案 5 :(得分:0)

尝试

'(c-max-one-liner-length 80)

'(fill-column 80)
'(c-ignore-auto-fill (quote (string cpp)))

希望它有所帮助。

答案 6 :(得分:0)

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

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

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

参考: ClangFormatStyleOptions. Related question