作为一些使用GNU / Emacs为Android开发的人,您肯定知道最新的Android工具引入了new xml formatter。我使用优秀的nxml-mode来编辑xml,因为...我编辑了xml文件;)我对它非常满意但是...因为我可以自定义Nxml属性缩进变量,文档说:
Indentation for the attributes of an element relative to the start-tag. Hide
This only applies when the first attribute of a tag starts a line.
In other cases, the first attribute on one line is indented the same
as the first attribute on the previous line.
当第一个属性与元素在同一行上时,第一个属性上的独立属性对齐的后备是重要的。
是否可以更改该行为,以获得与Android Tools兼容的缩进?我刚刚在文档中找不到任何内容,谷歌搜索失败了......
更新
评论帮助我意识到我不清楚。因此,这里是nxml-mode默认执行的示例:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.foo.bar"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application
android:label="@string/app_name"
android:icon="@drawable/ic_launcher">
<activity
android:name="Foo"
android:label="@string/foo" />
<activity android:name="Bar"
android:label="@string/bar" />
</application>
</manifest>
我想得到什么:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.foo.bar"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application
android:label="@string/app_name"
android:icon="@drawable/ic_launcher">
<activity
android:name="Foo"
android:label="@string/foo" />
<activity android:name="Bar"
android:label="@string/bar" />
</application>
</manifest>
第一种情况(默认的nxml模式缩进行为):
package
元素的manifest
属性与xmlns:android decl
android:label
元素的Bar activity
属性与android:name
元素对齐。第二种情况(预期结果):
package
元素的manifest
属性与父manifest
元素对齐,加上可配置的空格数android:label
元素的Bar activity
属性与父元素以及可配置的空格数对齐我浏览了nxml-mode源代码,缩进行为以nxml-indent-line
开头,但我没有按照许多子句来查看应该定制的defun
...由于我缺乏lisp知识
您可以看到manifest
秒属性未与第一个属性对齐
干杯,
Renaud(很难控制大规模头痛以符合Android编码和格式规则)
答案 0 :(得分:1)
看起来不容易修改,因为它似乎被硬编码到nxml-compute-indent-in-start-tag
函数中。相关的代码块似乎是这样的:
(let* ((att (car atts))
(start (xmltok-attribute-name-start att)))
(when (< start pos)
(goto-char start)
(setq off 0))))
你可以随时将该方法复制到你自己的init文件中,注释掉这些行,并在加载nxml模式后加载你的函数定义(这将覆盖原始实现)。
注意,您可能还想向gnu emacs维护者提交增强请求,以便将来轻松自定义此行为。