autocomplete - 如何使自动完成替换整行而不是当前关键字?
问题描述
在 Ace 编辑器中,我有一个这样的自定义完成器:
var customCompleter = {
getCompletions: function (editor, session, pos, prefix, callback) {
callback(null, [
{
value: 'foo.bar', score: 1, meta: 'History'
}
])
}
}
当我键入foo
时,它建议foo.bar
并替换foo
为foo.bar
. 但是当我键入时foo.b
,它会替换foo.b
为foo.foo.bar
而不是foo.bar
.
如何让 Ace 自动完成替换整行而不是当前关键字?
解决方案
您可以在自定义自动完成的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是直到您希望单词被替换的位置。
推荐阅读
- python - tf.data.Dataset:地图无法拆分字符串
- slack - 是否可以从 slack 令牌中获取范围列表?
- node.js - 在项目之间共享 React 组件的最简单方法是什么?
- spring - 在 Mac 上通过命令行打开多个 STS 实例?
- python - 使用带有 next() 的 yield
- sql - 如何在某些条件下创建更新触发器?
- javascript - 如何使用 jquery Unobtrusive Validation 正确验证表单?
- java - 如何遍历LinkedHashMap中的桶?
- go - 在 pkg-config 搜索路径中找不到包 rdkafka
- docker - 从 ubuntu 18.04 升级到 18.10 后,docker 容器内没有互联网连接