2017-01-31 1 views
1

show-hint.jsanyword-hint.jsの例では、CodeMirrorをエディタとして使用しています。デフォルトでは、Ctrl-Spaceを押すとヒントが表示されます。CodeMirrorエディタ:特定のキーパターンの後にヒントを表示@@

問題:

私はCtrl-Spaceとともに@@入力した後にCodeMirrorは、ヒントを表示したいです。

を私は"'@'": "autocomplete""'@'-'@'": "autocomplete"ようextraKeysを追加しようとしたが、それは動作しません:私はすでに試してみました何

。単一の@で動作しますが、@@では動作しません。

HTML:(.htmlの名前を付けて保存)

<!doctype html> 
<title>CodeMirror: Any Word Completion Demo</title> 
<meta charset="utf-8" /> 
<link rel=stylesheet href="https://codemirror.net/doc/docs.css"> 
<link rel="stylesheet" href="https://codemirror.net/lib/codemirror.css"> 
<link rel="stylesheet" href="https://codemirror.net/addon/hint/show-hint.css"> 
<script src="https://codemirror.net/lib/codemirror.js"></script> 
<script src="https://codemirror.net/addon/hint/show-hint.js"></script> 
<script src="https://codemirror.net/addon/hint/anyword-hint.js"></script> 
<script src="https://codemirror.net/mode/javascript/javascript.js"></script> 
<article> 
    <h2>Any Word Completion Demo</h2> 
    <form> 
    <textarea id="code" name="code"> 
     function isInt(n) { return n % 1 === 0; } 
    </textarea> 
    </form> 
    <script> 
    CodeMirror.commands.autocomplete = function(cm) { 
     cm.showHint({ 
     hint: CodeMirror.hint.anyword 
     }); 
    }; 
    var editor = CodeMirror.fromTextArea(document.getElementById("code"), { 
     lineNumbers: true, 
     extraKeys: { 
     "Ctrl-Space": "autocomplete", 
     "'@'": "autocomplete", 
     } 
    }); 
    </script> 
</article> 

答えて

1

私はより良い提案があるthis.Ifようにそれを解決し、投稿してください。

var editor = CodeMirror.fromTextArea(document.getElementById("code"), { 
    lineNumbers: true, 
    extraKeys: { 
    "Ctrl-Space": "autocomplete", 
    "'@'": function(cm) { 
     var charTomatch = '@'; 
     var curretCursorPosition = cm.getCursor(); 
     var backwardCursorPosition = { 
     line: curretCursorPosition.line, 
     ch: curretCursorPosition.ch - 1 
     }; 
     var forwardCursorPosition = { 
     line: curretCursorPosition.line, 
     ch: curretCursorPosition.ch + 1 
     }; 
     var backwardCharacter = cm.getRange(backwardCursorPosition, curretCursorPosition); 
     var forwardCharacter = cm.getRange(curretCursorPosition, forwardCursorPosition); 
     //update text anyway 
     cm.replaceRange(charTomatch, curretCursorPosition); 
     // 
     if (backwardCharacter === charTomatch || forwardCharacter === charTomatch) { 
     CodeMirror.commands.autocomplete(cm); 
     } 
    } 
    } 
}); 
関連する問題