用于编辑缩进暗示结构的文件的Emacs模式

用于编辑缩进暗示结构的文件的Emacs模式,emacs,indentation,Emacs,Indentation,我想在Emacs中编辑一个大的、毛茸茸的YAML文件。缩进意味着文件结构:如果A行缩进了十个空格,那么A将开始一个包含以下每一行缩进超过十个空格的部分。这是一个相当普遍的约定,远远超出了YAML 我真正想要的是一个emacs模式,它具有与此结构相关的定义。例如: 我想forward sexp跳过一个sexp,其中sexp是由缩进暗示的,而不是由匹配的括号对暗示的。类似地,我希望有其他导航命令移动到当前节结束后的行,移动到当前节的下一个同级节,等等 我希望有一个命令来折叠当前部分,或者除当前部分

我想在Emacs中编辑一个大的、毛茸茸的YAML文件。缩进意味着文件结构:如果A行缩进了十个空格,那么A将开始一个包含以下每一行缩进超过十个空格的部分。这是一个相当普遍的约定,远远超出了YAML

我真正想要的是一个emacs模式,它具有与此结构相关的定义。例如:

  • 我想
    forward sexp
    跳过一个sexp,其中sexp是由缩进暗示的,而不是由匹配的括号对暗示的。类似地,我希望有其他导航命令移动到当前节结束后的行,移动到当前节的下一个同级节,等等
  • 我希望有一个命令来折叠当前部分,或者除当前部分之外的所有部分,类似于outline模式可以折叠当前outline部分的方式,但是使用缩进定义的部分
  • 我希望模式行显示一些关于我所在部分的有用信息,如缩进所示
  • 我希望有一个选项可以自动突出显示当前行的所有祖先行
  • 其他我没想到的事情
我已经研究了yaml模式,但它没有做任何有用的事情。有几个人建议我尝试Python模式,但它在这方面效果不太好

一般的缩进行模式似乎是很久以前有人会写的,但如果它存在,我就找不到了。或者有什么方法可以破解
大纲模式
以我想要的方式工作


谢谢你的建议。

使用
大纲模式
并将
大纲regexp
设置为
“*”
并不能完全满足我的需求,但它确实满足了我的需求。例如,默认情况下绑定到
C-C-d
hide subtree
,似乎以我上面描述的方式折叠当前节<代码>大纲转发同一级别,绑定到
C-C-f
,也做了我想做的事情

有些事情仍然不太对劲。如果我找到任何其他有用的方法来调整
大纲模式
,我将修改这个答案


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

转到我写的下一个/当前的兄弟姐妹那里。加载文件并使用
M-x my yaml next sibling
。这个软件包还很初级,但在我看来非常有用

更新:此功能已成长为一个真正的软件包。它的第一个目标是在缩进块中导航:转到同一缩进的下一个节点、父节点等。这样就可以方便地缩进块、注释、折叠等


迈尔斯·古尔德建议看一看。如果这是有用的,我会写另一个答案。我写了一个函数去下一个/上一个兄弟,它仍然是基本的,但很有用,只要求增长。加载该文件并查看
my yaml next sibling
。更新:my函数已增长,现在是一个真正的包:。它的第一个目标是在缩进块中导航:转到同一缩进的下一个节点、父节点等。这样就可以方便地缩进块、注释、折叠等。