用于编辑文件的Emacs模式,其中缩进意味着结构

时间:2013-01-07 01:04:19

标签: emacs indentation

我想在Emacs中编辑一个很大的毛茸茸的YAML文件。压缩隐含文件结构:如果行A缩进十个空格,则A开始一个包含每个后续行的段,该行由十个以上的空格缩进。这是一个相当常见的约定,远远超出YAML。

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

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

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

一般的缩进线模式似乎是很久以前有人会写的东西,但如果存在,我就无法找到它。或者可能有某种方式来破解outline-mode以我想要的方式工作?

感谢您的任何建议。

2 个答案:

答案 0 :(得分:3)

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

有些事情仍然行不通。如果我找到其他有用的方法来调整C-c C-f,我会修改此答案。

这是对JoséAntonioOrtega Ruiz建议的略微修改。

答案 1 :(得分:1)

要转到下一个/当前的兄弟姐妹,我写了a function。加载文件并使用M-x my-yaml-next-sibling。这个包仍然是基本的,但非常有用的IMO!

更新:此功能已发展为真正的包indent-tools。它的第一个目标是缩进块中的导航:转到相同缩进的下一个节点,转到父节点等。然后它可以方便缩进块,注释,折叠等。

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