【问题标题】:CodeMirror editor autocompletion for predefined wordsCodeMirror 编辑器自动完成预定义的单词
【发布时间】:2015-02-16 17:07:05
【问题描述】:

我有一个网站,我使用 CodeMirror 编辑器输入数据。我想添加非常简单的自动完成功能:我有一些以 @ 符号开头的单词(@cat、@dog、@bird 等),我希望编辑器在用户键入 @ 或 @c 时显示带有这些单词的下拉列表 - 我该怎么做这?我看到了自动完成插件,但它们需要按 ctrl+space 并使用模式......所以,任何帮助都会很棒!

谢谢!

【问题讨论】:

    标签: javascript autocomplete codemirror


    【解决方案1】:

    方法如下(假设您已加载 CodeMirror 和 show-hint 插件):

    // Dummy mode that puts words into their own token
    // (You probably have a mode already)
    CodeMirror.defineMode("mylanguage", function() {
      return {token: function(stream, state) {
        if (stream.match(/[@\w+]/)) return "variable";
        stream.next();
        return null;
      }};
    });
    // Register an array of completion words for this mode
    CodeMirror.registerHelper("hintWords", "mylanguage",
                              ["@cat", "@dog", "@bird"]);
    
    // Create an editor
    var editor = CodeMirror(document.body, {mode: "mylanguage"});
    // When an @ is typed, activate completion
    editor.on("inputRead", function(editor, change) {
      if (change.text[0] == "@")
        editor.showHint();
    });
    

    【讨论】:

    • 嗨!谢谢你的帮助!我添加了“show-hint”插件,并按照您的建议添加了新的助手。你能帮我理解这应该如何工作吗? :) 我认为我走对了,只是想让这个工作))
    • 问题更多在于我的示例代码,而不是您对它的解释。我没有正确阅读您的问题,并且我的代码包含错误。我已经修复并扩展了一点。请注意,registerHelper 的第一个参数必须与您的语言模式名称相对应,并且您的模式必须至少将此类 @foo 构造放入它们自己的标记中,以便自动完成工作。
    • 如何将其与 javascript 模式合并,因为我想要 js-syntax highlight 的保留。
    猜你喜欢
    • 2013-10-15
    • 2014-09-21
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    相关资源
    最近更新 更多