如何使自动完成功能替换整行而不是当前关键字?

时间:2019-01-07 07:02:03

标签: autocomplete ace-editor

在Ace编辑器中,我有一个像这样的自定义完成器:

var customCompleter = {
  getCompletions: function (editor, session, pos, prefix, callback) {
    callback(null, [
      { 
        value: 'foo.bar', score: 1, meta: 'History'
      }
    ])
  }
}

enter image description here

当我键入foo时,它会建议foo.bar并将foo替换为foo.bar。但是当我键入foo.b时,它将foo.b替换为foo.foo.bar而不是foo.bar

如何使Ace自动完成功能代替整行而不是当前关键字?

1 个答案:

答案 0 :(得分:0)

您可以在自定义自动完成功能的 insertMatch 中使用ace函数 jumpToMatching 将光标移至单词的起始位置,然后使用 replace 添加自动填充的单词。

var customCompleter = {
    getCompletions: function (editor, session, pos, prefix, callback) {
        callback(null, [
            { 
                value: 'foo.bar', score: 1, meta: 'History',

                completer: {
                    insertMatch: function (insertEditor, data) {
                        var insertValue = data.value;
                        var lastPositon = editor.selection.getCursor();

                        insertEditor.jumpToMatching();
                        var startPosition = editor.selection.getCursor();

                        insertEditor.session.replace({
                            start: { row: startPosition.row, column: startPosition.column },
                            end: { row: lastPositon.row, column: lastPositon.column }
                        }, "");
                    }
                }
            ])
        }
    }

在这里 startPosition 将是单词的开始位置,而 lastPositon 将在您希望替换单词的位置。