1

在过去的 3 年中,我的工作需要编写和编辑 xml 格式的配置文件。xml 标签中的内容已经发展得如此之多,以至于现在它已经变得有点像一种编程语言。不幸的是,emacs 将标签内的所有内容都缩进到同一级别。像这样的东西:

当前在 nxml 模式下的 emacs 缩进

但是,如果我可以将内容缩进如下,那就太糟糕了:

我多么希望emacs能识别它

我已经阅读了几个与自定义缩进相关的线程,但我仍然不知道如何去做。

我试图创建一个自定义的主模式,但这样做会杀死所有的语法颜色和缩进规则。理想情况下,我想做的只是修改 nxml 市长模式缩进规则?不过,我不知道这个规则在哪里。

如果我可以为一些关键词着色,例如“if”或“set”,那将是一个奖励。

我知道我要问的是一项艰巨的工作,所以我不在这里要求一个明确的答案。我只是在寻找一些帮助来指出我正确的方向。

4

2 回答 2

2

可能最好的方法是为标签内的语言编写一个新的主要模式,然后使用多个主要模式包,它允许多个主要模式在同一个文件中处于活动状态,因此包含的语言可以有自己的主要模式。

于 2012-06-21T15:37:20.710 回答
1

你可能想看看这个例子。

(defun nxml-extra-space-indent ()
  (nxml-indent-line)
  (when (zerop (current-indentation))
    (indent-line-to 4)))
(setq indent-line-function 'nxml-extra-space-indent)

我根据现有的主要模式缩进,然后如果行符合某些条件则自定义缩进。
我认为这是自定义缩进最简单的方法,因为您是从现有的东西开始,并且您不需要知道特定模式的缩进逻辑是如何实现的。

于 2012-06-23T19:34:31.857 回答