2017-02-03 105 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; 
    } 
    } 
});