dsa*_*ket 5 javascript vim keymapping codemirror
我在我的项目中使用 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);
}
}
});
Run Code Online (Sandbox Code Playgroud)
如图所示,我映射了“Esc”键来退出全屏显示。现在,此键映射将覆盖脚本中定义的“Esc”键映射/keymap/vim.js,以将模式从 更改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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想我必须将我的声明修改为这样的内容,
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()
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何让它发挥作用。任何帮助将不胜感激。
如果您CodeMirror.Pass从密钥处理程序返回,将尝试其他处理程序。因此,在这种情况下,只需在您的条件(全屏)不成立时执行此操作即可。
extraKeys: {
Esc: function(cm) {
if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
else return CodeMirror.Pass;
}
}
| 归档时间: |
|
| 查看次数: |
1369 次 |
| 最近记录: |