创建自定义vim语法:我能设置自定义的自动缩进规则吗?

9
我正在为vim创建自定义语法文件,并希望告诉vim如何自动缩进代码以使代码更易于阅读。目前,我在vim中使用的常规重新缩进gg=G''只会删除每行开头的所有空格:
IF (@("X_17") = "X") THEN
*Make sure only one is selected
countX = 0;
IF (@("X_19") = "X") THEN
countX += 1;
END
IF (@("X_20") = "X") THEN
countX += 1;
END
IF (@("X_21") = "X") THEN
countX += 1;
END
...

我希望设置评论(以*开头)不缩进(行首没有任何空格),但其余内容基于IF和END进行缩进。正确缩进的相同代码(假设第一个IF在更大的IF / END块内):
    IF (@("X_17") = "X") THEN
*Make sure only one is selected
        countX = 0;
        IF (@("X_19") = "X") THEN
            countX += 1;
        END
        IF (@("X_20") = "X") THEN
            countX += 1;
        END
        IF (@("X_21") = "X") THEN
            countX += 1;
        END
        ...

我已经设置了语法高亮,并且关键字和内置函数已经包含在dal.vim文件中。以下是当前的dal.vim文件:http://pastebin.com/PEcSvqM9。有没有办法改变我现有的设置,让代码在IF/END块中自动缩进,同时保留所有注释,而不加任何空格?
额外问题:如何设置代码折叠以跟随这些IF/END块?我现在使用zf2j来折叠此代码。

1
未缩进的注释是一个非常奇怪的选择。除非我没有其他选择,否则我永远不会喜欢它,因为它会破坏代码的可读性。 - ZyX
1
我完全同意,但这不是我的选择。如果注释缩进,Dal脚本会抱怨。 - maccam912
1个回答

6

您需要编写一个缩进插件并将其放入 indent 子目录中。更多说明在中解释。

:h 'indentexpr'

这是你的插件应该设置的内容,请随意参考 vim 分发的一百个缩进脚本示例。我自己没有编写过这样的插件,所以无法确定哪一个示例最有用。

如果要进行代码折叠,请查看

:h :syn-fold

啊,不要在语法文件中设置缩进。虽然这是可能的,但这并不是这种工作的正确场所。

我不想自己编写,而是调整现有的一个,并发现 https://github.com/vim/vim/tree/master/runtime/indent 和 https://github.com/vim/vim/blob/master/runtime/doc/indent.txt 非常有用。 - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接