【问题标题】:Ace editor and vim keybindings: using :w commandAce 编辑器和 vim 键绑定:使用 :w 命令
【发布时间】:2015-01-21 23:01:05
【问题描述】:

我正在将 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');

我也将此命令映射到 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);
  }
});

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

keybinding-vim.js 文件抛出关于 CodeMirror.commands.save 未定义的错误 ...

我查看了 API 文档和演示,但无法找到解决此问题的“正确”方法。

帮助表示赞赏。 谢谢

【问题讨论】:

  • 删除了 vim 标签,因为这个问题不是关于 vim 的。它更像是一些 javascript 的东西。
  • @Kent 编辑标签,你错过了“javascipt”? :D
  • @Kent 谢谢,下次我会小心的

标签: javascript ace-editor


【解决方案1】:

目前还没有用于执行此操作的公共 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")
    })
})

【讨论】:

  • 非常感谢,完美运行。只是出于好奇,您是否发现阅读代码或是否存在带有这些“提示”的现有 URL?
  • 阅读代码,通常比查找文档更快更可靠
【解决方案2】:

大括号

import ace from 'brace';
require('brace/keybinding/vim');

editor.setKeyboardHandler('ace/keyboard/vim');

ace.config.loadModule('ace/keyboard/vim', function(module) {
   var VimApi = module.CodeMirror.Vim;
   VimApi.defineEx('write', 'w', function(cm, input) {
      cm.ace.execCommand('save');
   });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 2023-04-08
    • 2013-03-20
    • 2016-09-12
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    相关资源
    最近更新 更多