9

我想在 Emacs 中编辑一个大而多毛的 YAML 文件。缩进暗示文件结构:如果行 A 缩进十个空格,则 A 开始一个节,该节包含缩进十个以上空格的每个后续行。这是一个相当普遍的约定,远远超出 YAML 的使用范围。

我真正想要的是具有尊重这种结构的定义的 emacs 模式。例如:

  • 我想forward-sexp跳过一个 sexp,其中一个 sexp 是由缩进而不是通过匹配的括号对来暗示的。同样,我希望有其他导航命令可以移动到当前部分结束后的行,移动到当前部分的下一个兄弟部分,依此类推。
  • 我希望有一个命令来折叠当前部分或除当前部分之外的所有部分,类似于大纲模式可以折叠当前大纲部分的方式,但部分由缩进定义。
  • 我希望模式行显示关于我所在部分的有用信息,正如缩进所暗示的那样。
  • 我希望有一个选项可以自动突出显示当前行的所有祖先行。
  • 其他我没有想到的。

我看过yaml-mode,但它没有做任何有用的事情。有几个人建议我尝试 Python 模式,但它不能很好地用于此目的。

通用缩进线模式似乎是很久以前有人会写的那种东西,但如果它存在,我找不到它。或者也许有一些方法可以outline-mode按照我想要的方式工作?

感谢您的任何建议。

4

2 回答 2

3

使用outline-mode和设置outline-regexpto" *"并不能得到我想要的东西,但它确实得到了相当多的东西。例如,默认情况下hide-subtree绑定到C-c C-d的,似乎以我上面描述的方式折叠当前部分。outline-forward-same-level, 绑定到C-c C-f, 也做我想要的。

有些事情仍然不能很好地工作。如果我发现任何其他有用的方法来调整,我会修改这个答案outline-mode

这是对 José Antonio Ortega Ruiz 建议的轻微修改。

于 2013-01-08T03:27:41.790 回答
1

要转到下一个/当前兄弟姐妹,我写了一个函数。加载文件并使用M-x my-yaml-next-sibling. 这个包仍然很简陋,但在 IMO 中非常有用!

update : 这个函数已经成长为一个真正的包indent-tools。它的第一个目标是在缩进块中导航:转到相同缩进的下一个节点,到父节点等。然后缩进块,注释,折叠等很方便。

尚未在 melpa 中,但在此过程中。

于 2016-03-13T00:04:38.700 回答