2017-02-03 109 views
0

在我的CodeMirror自定义模式中,我想要在用户输入以字bank(带有可选前导空格)开头的行时触发electricInput事件。CodeMirror electricInput与前导空白的表达式不匹配

我有electricInput设置是这样的:electricInput: /\s*bank$/i

该事件不火,当用户键入bank在一行的开头。当单词bank之前有空格时,它不会触发。为什么?

(正则表达式似乎是罚款我都在用相同的正则表达式该模式语法规则,并如预期令牌匹配,不管领先的空格,:

CodeMirror.defineSimpleMode("myMode", { 
    start: [ 
    {regex: /\s*bank$/i, token: 'bank', sol: true, indent: true} 
+0

查看CoreMirror的源代码,正则表达式确实匹配,但是CodeMirror之后会执行智能缩进,并且只会在缩进更改时触发事件。如果是这样的话,当用户输入带有空白的银行时,我怎么能得到通知?我想删除所有缩进,不仅是新创建的缩进,而且还包括这些行上的缩进。 – travelboy

+1

设置您的模式的缩进功能,以“bank”开头的行返回0 – Marijn

回答

0

感谢Marijn的样我可以解决这个问题:自定义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; 
    } 
    } 
});