我想在Emacs中编辑一个很大的毛茸茸的YAML文件。压缩隐含文件结构:如果行A缩进十个空格,则A开始一个包含每个后续行的段,该行由十个以上的空格缩进。这是一个相当常见的约定,远远超出YAML。
我真正想要的是具有尊重此结构的定义的emacs模式。例如:
forward-sexp
跳过一个性别,其中性别是由缩进暗示而不是匹配括号对。同样,我希望有其他导航命令移动到当前部分结束后的行,到下一个兄弟部分到当前部分,依此类推。我查看了yaml-mode
,但它并没有做任何有用的事情。有几个人建议我尝试Python模式,但它并没有很好地用于此目的。
一般的缩进线模式似乎是很久以前有人会写的东西,但如果存在,我就无法找到它。或者可能有某种方式来破解outline-mode
以我想要的方式工作?
感谢您的任何建议。
答案 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中,但在此过程中。