假设我的 emacs 缓冲区中有一行如下所示:

foo -option1 value1 -option2 value2 -option3 value3 \
    -option4 value4 ...

我希望它看起来像这样:

foo -option1 value1 \
    -option2 value2 \
    -option3 value3 \
    -option4 value4 \
    ...

我希望每个选项/值对都在单独的行上。我还希望这些后续行根据模式适当缩进,而不是添加固定数量的空格。我希望代码在当前块上工作,在第一个非空白行或不包含选项/值对的行处停止,尽管我可以满足它在选定区域上工作的情况。

有人知道 elisp 函数可以做到这一点吗?

有帮助吗?

解决方案

没有人拥有我想要的东西,所以我决定掸掉我的 elisp 手册并自己做。这似乎工作得很好,尽管输出并不完全是我所要求的。在此版本中,第一个选项单独占一行,而不是像我原来的问题一样留在第一行。

其他提示

在这种情况下我会使用宏。您可以使用 C-x 开始录制宏(并使用 C-x 停止录制)。当您想要重播宏时,请键入 C-x e。

在这种情况下,我会输入 C-a C-x ( C-s value a l u e C-f C-f \ RET SPC SPC SPC SPC C-x )

这将记录一个搜索“值”的宏,向前移动 2,插入斜杠和换行符,最后将新行隔开以对齐。然后你可以重复这个宏几次。

编辑:我刚刚意识到,您的文字文本可能不像“value1”那么容易搜索。您还可以搜索空格并循环浏览命中内容。例如,在第一场比赛后按几次 C-s 可跳过某些比赛。

笔记:由于您的示例是“临时”的,因此该解决方案也是如此。当您需要临时解决方案时,通常会使用宏。使宏应用更加一致的一种方法是将原始语句全部放在一行上(也可以通过宏或手动完成)。

编辑:感谢您对 ( 与 C-( 的评论,你是对的,我的错误!

就我个人而言,我一直在做这样的事情。

但是,除非我每天都会在一年中每天这样做,否则我不会写一个功能。

您可以使用查询替换轻松完成此操作,如下所示:

m-x(查询替换“-选项”“^Q^J -选项”)

我说 ^q ^j,因为那是您要输入的引用newline并将其放入字符串中的内容。

然后按“ y”以替换字符串,然后“ n”跳过您会发现的零角盒。

另一个主力功能是查询重定位regexp,可以替换正则表达式。

以及Grep-Query-Replace,它将通过解析GREP命令的输出来执行查询重复位置。这很有用,因为您可以在100个文件中搜索“ foo”,然后在每次文件中跳过文件上进行查询重新定位。

您的模式可能已经支持这一点。至少在 C 模式和 Makefile 模式下,M-q(填充段落)将在填充列中插入行延续并换行。

你在什么模式下编辑这个?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top