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

时间:2012-07-31 19:46:35

标签: vim

我正在为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
        ...

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

http://pastebin.com/PEcSvqM9

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

奖金问题:如何设置代码折叠以跟随那些IF / END块?现在我正在zf2j折叠此代码。

1 个答案:

答案 0 :(得分:2)

您必须编写缩进插件并将其放入indent子目录中。

中解释了更多内容
:h 'indentexpr'

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

代码折叠结帐

:h :syn-fold

啊,不要在语法文件中设置缩进。这不是不可能的,但对于这种类型的工作来说,这不是正确的地方。