我在我的项目中使用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()
}
}
}
但我不知道如何让它发挥作用。任何帮助都将非常感激。
答案 0 :(得分:1)
如果从密钥处理程序返回CodeMirror.Pass
,则会尝试其他处理程序。因此,在这种情况下,只需在条件(全屏)不成立时执行此操作。
extraKeys: {
Esc: function(cm) {
if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
else return CodeMirror.Pass;
}
}
答案 1 :(得分:0)
终于想出了一个快速的出路。我删除了“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”不会被覆盖并且仍在工作。