在我的编辑器实现中,我需要使用键盘导航检测何时有人在编辑器中上下移动。通过捕获向上和向下键,我可以轻松地在“默认” ACE编辑模式下完成此操作。
但是,使用VIM会更加复杂,因为vim导航键只能在导航模式下捕获。我可以检查编辑器是否正在使用Vim模式,但无法弄清楚如何检测VIM处于哪种模式。
这是关键点导航陷阱:
$("pre[lang]").on("keyup", function(event) {
updateDocument();
// up and down handling - force a preview refresh
if (event.keyCode === 38 || event.keyCode === 40)
te.previewRefresh();
else if (te.lastStyle.keyboardHandler === "vim") {
var vim = require("ace/keyboard/vim").Vim;
// How to get active Vim mode in document?
//
// if (vim is in navigation mode)
// te.previewRefresh();
}
});
任何帮助将不胜感激。
在row
更改时,也许有更好的方法来捕获键盘导航。我已经尝试过编辑器change
事件和增量,但是看起来比键陷阱更加复杂和不可靠。关于我可能错过的任何建议都是有用的。
答案 0 :(得分:2)
看起来我在发布后立刻找到了答案(当然)。在此处发布以供其他人查看。
ACE实际上跟踪vim及其配置状态,并且在状态editor.state
上附加了一个insertMode
(以及其他)可以检查的状态对象。
以下内容使我可以检测导航键并对其进行操作。
// up and down handling - force a preview refresh
if (event.keyCode === 38 || event.keyCode === 40)
previewRefresh();
else if (te.editor.$keybindingId === "ace/keyboard/vim"
&& (event.keyCode === 74 || event.keyCode == 75)) {
if (!te.editor.state.cm.state.vim.insertMode)
previewRefresh();
}