CodeMirror electricInput与前导空格

时间:2017-02-03 22:37:44

标签: regex codemirror

在我的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}

1 个答案:

答案 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;
    }
  }  
});