Как сделать так, чтобы автозаполнение заменяло всю строку вместо текущего ключевого слова? - PullRequest
0 голосов
/ 07 января 2019

В редакторе 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 голосов
/ 07 января 2019

Вы можете использовать туз-функцию jumpToMatching внутри insertMatch вашего пользовательского автозаполнения, чтобы переместить курсор в начальную позицию слова и затем использовать 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 будет там, где вы хотите заменить слово.

...