Javascript 代码镜像键映射vim<;电子稳定控制系统>;不起作用

Javascript 代码镜像键映射vim<;电子稳定控制系统>;不起作用,javascript,vim,codemirror,keymapping,Javascript,Vim,Codemirror,Keymapping,我正在我的项目中使用CodeMirror编辑器。我同时使用了/addon/display/fullscreen.js和/keymap/vim.js脚本,并像这样声明了CodeMirror实例 var editor = CodeMirror.fromTextArea(document.getElementById("code"), { keyMap: "vim", extraKeys: { "F11": function(cm) { cm.setOption("full

我正在我的项目中使用CodeMirror编辑器。我同时使用了
/addon/display/fullscreen.js
/keymap/vim.js
脚本,并像这样声明了CodeMirror实例

var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
  keyMap: "vim",
  extraKeys: {
    "F11": function(cm) {
      cm.setOption("fullScreen", !cm.getOption("fullScreen"));
    },
    "Esc": function(cm) {
      if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
    }
  }
});
extraKeys: {
        "F11": function(cm) {
          cm.setOption("fullScreen", !cm.getOption("fullScreen"));
        },
        "Esc": function(cm) {
          if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
          if (cm.getOption("keyMap") == "vim"){ 
             //Call handleEsc()
          }
        }
      }
如图所示,我已映射“Esc”键以退出全屏显示。现在,该键映射覆盖了
/keymap/vim.js
脚本中定义的“Esc”键映射,用于将模式从
insert
更改为
visual

我检查了脚本,找到了这个函数

function handleEsc() {
  if (key == '<Esc>') {
    // Clear input state and get back to normal mode.
    clearInputState(cm);
    if (vim.visualMode) {
      exitVisualMode(cm);
    } else if (vim.insertMode) {
      exitInsertMode(cm);
    }
    return true;
  }
}

但我不知道如何让它工作。任何帮助都将不胜感激。

如果您返回
codemirr.Pass
键处理程序,将尝试进一步的处理程序。因此,在这种情况下,只要在您的条件(全屏)不适用时执行此操作即可


外键:{
Esc:功能(cm){
if(cm.getOption(“全屏”))cm.setOption(“全屏”),false;
否则返回CodeMirror.Pass;
}
}

终于想出了一个快速的解决办法。我删除了“Esc”键映射,并使用Codemirror的
keydown
事件,如下所示:

CodeMirror.on(editor, 'keydown', function(cm,event) {
      if(event.keyCode==27){
        if(editor.getOption("fullScreen"))
          toggleFullScreen();//exit full screen
      }
    });
通过这种方式,我不必使用
extraKeys
方法,因此vim“Esc”不会被覆盖并仍在工作。

为什么不试试呢?我添加了一些代码——这是对示例
extraKeys
选项的一个小小修改。