Ace编辑器和vim键绑定:using:w命令

jus*_*ude 8 javascript ace-editor

我正在将Ace Editor集成到一个Web应用程序中,并使用像这样的vim键绑定:

 var editor = ace.edit('editor');
 editor.setDisplayIndentGuides(false);
 editor.setHighlightActiveLine(false);
 editor.setShowFoldWidgets(false);
 editor.setShowInvisibles(false);
 editor.setShowPrintMargin(false);
 editor.setKeyboardHandler('ace/keyboard/vim');
Run Code Online (Sandbox Code Playgroud)

我也将此命令映射到Ctrl-S/Command-S,因为我想测试行为

editor.commands.addCommand({
  name: 'saveFile',
  bindKey: {
    win: 'Ctrl-S', mac: 'Command-S',
    sender: 'editor|cli'
  },
  exec: function (env, args, request) {
    console.log('saving...', env, args, request);
  }
});
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但问题是当使用ESCape键在Vim中进入"普通"模式,并使用:w来保存文件时,上面定义的命令的exec函数不会像调用Ctrl-S/Command那样被调用-S ......

并且keybinding-vim.js文件抛出一个错误,关于CodeMirror.commands.save没有被定义...

我查看了API文档和演示,但一直无法找到解决此问题的"正确"方法.

帮助赞赏.谢谢

a u*_*ser 10

这样做还没有公开的api.但你可以做到

ace.config.loadModule("ace/keyboard/vim", function(m) {
    var VimApi = require("ace/keyboard/vim").CodeMirror.Vim
    VimApi.defineEx("write", "w", function(cm, input) {
        cm.ace.execCommand("save")
    })
})
Run Code Online (Sandbox Code Playgroud)