我当前的目标是改变行为,使得所有删除整行或多行的 vim 命令仅在满足某些条件时才执行。这个主题帮助我覆盖了删除函数:用函数调用替换 Ace 编辑器的 Vim 模式中删除行热键“dd”的标准行为 但我无法从被覆盖的函数中调用删除函数的原始实现,以便在不满足条件时它的行为正常。
import * as ace from 'ace-builds';
this.aceEditor = ace.edit(this.editor.nativeElement);
ace.require('ace/keybindings/vim');
this.aceEditor.setKeyboardHandler('ace/keyboard/vim');
ace.config.loadModule('ace/keyboard/vim', () => {
var VimApi = ace.require('ace/keyboard/vim').CodeMirror.Vim;
VimApi.defineOperator(
'delete',
this.deleteCurrentLineIfSolved.bind(this)
);
});
deleteCurrentLineIfSolved(event, signal) {
// if condition is met, call original implementation of delete here
// else, do nothing
}
删除函数似乎存储在某种形式的“操作符”数组中,github.com/ajaxorg/ace/blob/master/src/keyboard/vim.js#L3182,但我不确定如何导入或访问它。
任何帮助将不胜感激。
这个功能似乎不存在,所以我实现了一个返回 /keyboard/vim.js 文件中的删除函数的函数,并成功使用了它。