微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – Codemirror keymap vim无法正常工作

我在我的项目中使用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);
    }
  }
});

如图所示,我已经映射了“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;
  }
}

现在,我认为我必须将我的声明修改为这样的,

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()
          }
        }
      }

但我不知道如何让它发挥作用.任何帮助将非常感激.

解决方法

如果从密钥处理程序返回CodeMirror.Pass,则将尝试其他处理程序.因此,在这种情况下,只需在您的条件(全屏)不成立时执行此操作.

extraKeys:{  Esc:function(cm){    if(cm.getoption(“fullScreen”))cm.setoption(“fullScreen”,false);    else返回CodeMirror.Pass;  }}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐