在IPython笔记本/木星中,单元格内上下键的箭头由CodeMirror处理(据我所知)。我经常使用这些操作(重新绑定到control/control)来在单元格之间移动;但是在每个单元格的末尾,光标首先移动到行尾--,然后跳到下一个单元格。这是违反直觉的,而且,对我来说,相当分散注意力。
有没有任何方法来配置CodeMirror,使这个移动下来只是-一个向下移动?
谢谢!
发布于 2015-09-27 15:13:41
我知道在代码单元格的最后一行中跳过“行结束”行为的并不是我一个人,所以我调查了这种行为,并发现:
findPosV和moveV),它将进入行尾。cell.js;class:Cell;method:handle_codemirror_keyevent)处理"down“事件之后该做什么;查看代码,我发现IPython忽略了事件,而不是在最后一行的最后一个字符。这在本质上证实了马里金的回答。
主要目标是跳转到下一个单元格,我认为没有必要阻止CodeMirror到达该行的末尾。关键是强制IPython无论如何处理事件。
我的解决方案是将代码从Cell.prototype.handle_codemirror_keyevent更改为:
Cell.prototype.handle_codemirror_keyevent = function (editor, event) {
var shortcuts = this.keyboard_manager.edit_shortcuts;
var cur = editor.getCursor();
if((cur.line !== 0) && event.keyCode === 38){
// going up, but not from the first line
// don't do anything more with the event
event._ipkmIgnore = true;
}
var nLastLine = editor.lastLine();
if ((event.keyCode === 40) &&
((cur.line !== nLastLine))
) {
// going down, but not from the last line
// don't do anything more with the event
event._ipkmIgnore = true;
}
// if this is an edit_shortcuts shortcut, the global keyboard/shortcut
// manager will handle it
if (shortcuts.handles(event)) {
return true;
}
return false;
};这段代码为“向下箭头”键提供了所需的行为(几乎:光标仍然到行的末尾,只是我们没有看到它,因为我们已经在另一个单元格中了),并且同样处理“向上箭头”键。
要修改handle_codemirror_keyevent原型,有两种可能:
cell.js文件并将原型的代码更改为我前面给出的代码。该文件在<python>/Lib/site-packages/IPython/html/static/notebook/js或类似的版本中,取决于您的发行版。custom.js中这样做,也可以在创建一个扩展中这样做(这就是我所做的)。发布于 2015-09-21 11:55:37
移动到下一个单元格的行为由IPython包装代码定义,它可能检查游标是否位于当前单元格的末尾,并覆盖默认的CodeMirror行为。您必须找到该处理程序,并将其替换为检查游标是否位于最后一行的处理程序。(我对IPython不太了解,只知道CodeMirror,所以我不能指出找到和重写相关代码的正确方法。它们可能已经绑定了Down键,也可能重写了goLineDown 命令。)
https://stackoverflow.com/questions/32544502
复制相似问题