更改 ace 编辑器 Codemirror 扩展中的“删除”功能以执行额外检查

问题描述 投票:0回答:1

我当前的目标是改变行为,使得所有删除整行或多行的 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,但我不确定如何导入或访问它。

任何帮助将不胜感激。

javascript typescript codemirror ace-editor
1个回答
0
投票

这个功能似乎不存在,所以我实现了一个返回 /keyboard/vim.js 文件中的删除函数的函数,并成功使用了它。

© www.soinside.com 2019 - 2024. All rights reserved.