【问题标题】:Emacs: How to indent multiline statement by one tab only, when not first statement on a line?Emacs:当不是一行中的第一个语句时,如何仅通过一个选项卡缩进多行语句?
【发布时间】:2011-04-19 12:54:57
【问题描述】:

我不知道如何告诉 Emacs 缩进类似于下面的代码,如图:(标签宽度为 2)

gotoxy(1, 2); cout << "one";
gotoxy(3, 4); cout << "this is "
  "split over two lines";
gotoxy(5, 6); cout << "three";

“statement-cont”变量设置为“+”,表示我想要一个缩进,但我最终得到了这个:

gotoxy(1, 2); cout << "one";
gotoxy(3, 4); cout << "this is "
                "split over two lines";
gotoxy(5, 6); cout << "three";

它从语句的开头而不是行的开头执行单个缩进。

我如何告诉 Emacs 从上一行的开头开始缩进,而不是从语句开始的任何列开始?

【问题讨论】:

  • 为什么要让 Emacs 做错事?它应该使延续显然是前一个 statement 的延续,而不仅仅是前一个 line
  • @drysdam:对与错是相当主观的——在这种情况下,gotoxy() 命令应该被视为同一语句的一部分。无论如何,换行的全部原因是将其保持在 80 列之内,因此将下一行缩进 70 个空格几乎不值得一开始就将其换行。在你不得不再次打破它之前,你只会得到 10 个字符。我宁愿用“错误”缩进将它分成两行,而不是用“正确”缩进分散在 10 多行中。
  • 你能把多语句行分组吗?这样,他们仍然在一起,与程序的其他部分分开。你有什么特殊的理由每行写多个语句吗?
  • @vpit3833:通常我会将它们分成几段,但在这种特殊情况下,将它们放在同一行上更容易维护。这很重要,因为如果忘记了我在这里命名的函数gotoxy,日志文件就会损坏。通过将它们放在同一行上,它足以让gotoxy 呼叫永远不会被遗忘!正如@Lindydancer 建议的那样,我现在正在使用更好的方法来实现这一点,所以这只是为了在维护遗留代码的同时减少我的挫败感!

标签: emacs indentation


【解决方案1】:

这可能不是您正在寻找的答案...无论如何,由于 gotoxy 函数显然正在对 cout 执行某些操作,您为什么不将它包装成 manip函数并将其包含在流中,这样您将 1) 每行一个语句,可以正确缩进,2) 获得更长行的能力,因为您不必在每个 gotoxy 处停下来, 3) 它使您能够在任何流上应用gotoxy

例如:

cout << gotoxy(1, 2) << "one";
cout << gotoxy(3, 4) << "this is "
  "split over two lines";
cout << gotoxy(5, 6) << "three";

或者,更简单:

cout << gotoxy(1, 2) << "one"
     << gotoxy(3, 4) << "this is "
  "split over two lines"
     << gotoxy(5, 6) << "three";

顺便说一句,这两个部分在 Emacs 中都是缩进的。

您可以阅读更多关于流操纵函数的信息,例如,这里:http://www.devarticles.com/c/a/Cplusplus/Custom-Stream-Manipulation-in-C/2/

【讨论】:

  • 好建议。实际上,我已经为其他一些项目完成了此操作,并且按照您的建议运行良好,但不幸的是,我目前正在维护一个旧代码库,并且现在没有动力重写其中的大部分内容:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多