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

创建自定义vim语法:我可以设置自定义自动缩进规则吗?,vim,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")

我正在为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块中):

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

有没有一种方法可以改变我所拥有的内容,使代码在IF/END块中自动缩进,同时保持所有注释的开头没有空格


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

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

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

代码折叠退房

:h :syn-fold

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

不加修饰的评论是一个非常奇怪的选择。当然,除非我没有其他变体,否则我永远不会喜欢它,因为它会破坏代码阅读。我完全同意,但这不是我的选择。Dal脚本会抱怨注释是否缩进。我不想写我自己的,但调整了一个现有的,并发现它非常有用。
:h :syn-fold