首页 > 解决方案 > 如何实现代码镜像以在没有 CTRL+SPACE 的情况下显示提示

问题描述

JavaScript:

        $http.get("/getApexBody", config).then(function(response) {
            document.getElementById("saveBtn").disabled = false;
            document.getElementById("cleanBtn").disabled = false;
            $scope.apexClassWrapper = response.data;
            $('#loaderImage').hide();
            if (globalEditor1) {
                globalEditor1.toTextArea();
            }
            setTimeout(function(test) {
                CodeMirror.commands.autocomplete = function(cm) {
                    cm.showHint({
                        hint: CodeMirror.hint.auto
                    });
                };
                var editor = CodeMirror.fromTextArea(document.getElementById('apexBody'), {
                    lineNumbers: true,
                    matchBrackets: true,
                    extraKeys: {
                        "Ctrl-Space": "autocomplete"
                    },
                    gutters: ["CodeMirror-lint-markers"],
                    lint: true,
                    mode: "text/x-apex"
                });
                globalEditor1 = $('.CodeMirror')[0].CodeMirror;
            }), 2000
        });

这是我的 JS 文件,ctrl-space 工作正常,但我需要在没有任何键绑定的情况下实现自动完成。

我什至试过这个:

        $http.get("/getApexBody", config).then(function(response) {
            document.getElementById("saveBtn").disabled = false;
            document.getElementById("cleanBtn").disabled = false;
            $scope.apexClassWrapper = response.data;
            $('#loaderImage').hide();
            if (globalEditor1) {
                globalEditor1.toTextArea();
            }
            setTimeout(function(test) {
                /* CodeMirror.commands.autocomplete = function(cm) {
                    cm.showHint({
                        hint: CodeMirror.hint.auto
                    });
                };*/
                var editor = CodeMirror.fromTextArea(document.getElementById('apexBody'), {
                    lineNumbers: true,
                    matchBrackets: true,
                    /*extraKeys: {
                        "Ctrl-Space": "autocomplete"
                    },*/
                    gutters: ["CodeMirror-lint-markers"],
                    lint: true,
                    mode: "text/x-apex"
                });
                editor.on('inputRead', function onChange(editor, input) {
                    if (input.text[0] === ';' || input.text[0] === ' ') {
                        return;
                    }
                    CodeMirror.commands.autocomplete = function(editor) {
                        editor.showHint({
                            hint: CodeMirror.hint.auto
                        });
                    };
                });
                globalEditor1 = $('.CodeMirror')[0].CodeMirror;
            }), 2000
        });

但这不起作用。我在这里缺少什么吗?如何使用 codemirror 显示实时完成提示?

我使用了 show-hints.js ,并对其进行了一些修改以适用于“。” 也。请帮忙。

标签: javascriptautocompletecodemirror

解决方案


使用此功能自动完成 codeMirror 没有CTRL+ Space

show-hint.js 中将 completeSingle设置为 false

editor.on("inputRead", function(instance) {
    if (instance.state.completionActive) {
            return;
    }
    var cur = instance.getCursor();
    var token = instance.getTokenAt(cur);
    if (token.type && token.type != "comment") {
            CodeMirror.commands.autocomplete(instance);
    }
});

推荐阅读