Autocomplete 如何为CodeMirror编辑器应用自动缩进?

Autocomplete 如何为CodeMirror编辑器应用自动缩进?,autocomplete,editor,codemirror,Autocomplete,Editor,Codemirror,我正在为几种语言(Groovy、Python、Beanshell、XSLT)使用公共代码镜像编辑器。根据下拉列表中选择的语言,我为编辑器设置了相应的模式 如何为上述语言应用自动缩进?CodeMirror模式可以为其各自的语言提供缩进,大多数模式都可以(例如)。这可以通过检查模式的源代码来验证,以检查是否实现了indent(state,textfeater)。从文档中: 如果希望模式提供智能缩进(通过 方法和indentAuto和newlineAndIndent命令 您必须定义缩进(state,t

我正在为几种语言(Groovy、Python、Beanshell、XSLT)使用公共代码镜像编辑器。根据下拉列表中选择的语言,我为编辑器设置了相应的模式


如何为上述语言应用自动缩进?

CodeMirror模式可以为其各自的语言提供缩进,大多数模式都可以(例如)。这可以通过检查模式的源代码来验证,以检查是否实现了
indent(state,textfeater)
。从文档中:

如果希望模式提供智能缩进(通过 方法和
indentAuto
newlineAndIndent
命令 您必须定义缩进(state,textfeater) 方法在您的模式对象上

应用定义缩进(state,textfeater)的模式后,假设
smartIndent
设置为
true
(默认值),则应透明地提供自动缩进,无需您额外努力


如果某个模式不支持开箱即用的智能缩进,则始终可以自己实现。请参阅文档中的部分。

我看到python.js有一个名为indent(stream、state、type)的方法。我不确定这些被称为流和状态的参数是什么。你能告诉我吗?我读了两遍,但没有得到答案。我所理解的是python.js包含缩进代码。但不知道如何使用它。您只需使用编辑器即可使用它-当您将代码写入编辑器时,每一行新行都将按照模式指定的规则缩进。请阅读关于书写模式的Codemirror文档,正如建议的那样,它将为您提供更多信息。您是否也在寻找post factum代码格式化功能?我是。具体来说,给定的CodeMirror模式并不总是使用与现有代码相同数量的缩进空格。即使可以调整模式,也需要对每个模式进行调整。在编辑时,我还没有找到一种简单的(例如单键)方法来自动将当前行重新插入到CodeMirror想要的位置。例如,在emacs中,我可以点击一行上的“tab”,它将正确缩进,在CodeMirror中,它只是添加了一个缩进级别,这不是我想要的。嗨@Michael,如果你按住Ctrl+a(选择文档中的所有文本),然后按住Shift+tab,它将重新缩进整个文档。