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

mac*_*912 9 vim

我正在为vim创建一个自定义语法文件,为了使代码更容易阅读,我想告诉vim如何自动缩进代码.现在,我gg=G''在vim中的通常重新缩进只是摆脱了每行开头的所有空格:

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
...
Run Code Online (Sandbox Code Playgroud)

我想设置它以便注释(以*开头)根本没有缩进(在行的开头没有空格),但其余的是基于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
        ...
Run Code Online (Sandbox Code Playgroud)

我有语法higlighting设置,关键字和内置函数已经是dal.vim文件的一部分.这是当前的dal.vim:

http://pastebin.com/PEcSvqM9

有没有办法改变我所拥有的,以便代码将在IF/END块中自动缩进,同时保持所有注释在开头没有空格?

额外问题:如何设置代码折叠以跟随那些IF/END块?现在我正在做zf2j折叠这段代码.

ZyX*_*ZyX 5

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

:h 'indentexpr'
Run Code Online (Sandbox Code Playgroud)

,这是你的插件应该设置的。随意从与 vim 一起分发的一百个缩进脚本中获取示例。我没有自己写这样的插件,所以不能说哪个最有用作为例子。

对于代码折叠签出

:h :syn-fold
Run Code Online (Sandbox Code Playgroud)

啊,不要在语法文件中设置缩进。这并非不可能,但它只是不适合这种工作的地方。