在我的CodeMirror自定义模式中,我希望当用户键入以单词bank
开头的行(带有可选的前导空格)时触发electricInput事件。
我的电子输入设置如下:electricInput: /\s*bank$/i
当用户在一行开头输入bank
时,会触发事件。当单词bank
之前有空格时,它不会触发。为什么呢?
(RegEx似乎很好。我在该模式下使用相同的RegEx语法规则,并且无论前导空格如何,它都会按预期匹配令牌:
CodeMirror.defineSimpleMode("myMode", {
start: [
{regex: /\s*bank$/i, token: 'bank', sol: true, indent: true}
答案 0 :(得分:0)
感谢Marijn在CodeMirror讨论论坛上的帮助,我能够解决这个问题:需要将自定义indent
函数传递给defineSimpleMode
。然后,我们仍然需要设置electricInput
(因为否则在键入bank
时不会调用缩进函数)。但是不需要onElectricInput
的事件处理程序。
CodeMirror.defineSimpleMode("myMode", {
start: [
...
],
meta: {
electricInput: /\s*bank$/i,
indent: function (state, textAfter, line) {
if (textAfter.substring(0, 4).toLowerCase() === 'bank') return 0
return 2;
}
}
});