首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“向下箭头”将光标移至行尾--如何关闭它

“向下箭头”将光标移至行尾--如何关闭它
EN

Stack Overflow用户
提问于 2015-09-12 22:43:54
回答 2查看 2.2K关注 0票数 1

在IPython笔记本/木星中,单元格内上下键的箭头由CodeMirror处理(据我所知)。我经常使用这些操作(重新绑定到control/control)来在单元格之间移动;但是在每个单元格的末尾,光标首先移动到行尾--,然后跳到下一个单元格。这是违反直觉的,而且,对我来说,相当分散注意力。

有没有任何方法来配置CodeMirror,使这个移动下来只是-一个向下移动?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-27 15:13:41

我知道在代码单元格的最后一行中跳过“行结束”行为的并不是我一个人,所以我调查了这种行为,并发现:

  • 当您键入代码单元格的最后一行时(文件: CodeMirror;“方法”:findPosVmoveV),它将进入行尾。
  • 是IPython决定了在CodeMirror (文件:cell.js;class:Cell;method:handle_codemirror_keyevent)处理"down“事件之后该做什么;查看代码,我发现IPython忽略了事件,而不是在最后一行的最后一个字符。

这在本质上证实了马里金的回答。

主要目标是跳转到下一个单元格,我认为没有必要阻止CodeMirror到达该行的末尾。关键是强制IPython无论如何处理事件。

我的解决方案是将代码从Cell.prototype.handle_codemirror_keyevent更改为:

代码语言:javascript
复制
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原型,有两种可能:

  1. 您编辑cell.js文件并将原型的代码更改为我前面给出的代码。该文件在<python>/Lib/site-packages/IPython/html/static/notebook/js或类似的版本中,取决于您的发行版。
  2. 要好得多,在加载页面之后,您可以通过以下操作动态地更改该原型: IPython.Cell.prototype.handle_codemirror_keyevent =函数(编辑器,事件){ }; 例如,您可以在custom.js中这样做,也可以在创建一个扩展中这样做(这就是我所做的)。
票数 1
EN

Stack Overflow用户

发布于 2015-09-21 11:55:37

移动到下一个单元格的行为由IPython包装代码定义,它可能检查游标是否位于当前单元格的末尾,并覆盖默认的CodeMirror行为。您必须找到该处理程序,并将其替换为检查游标是否位于最后一行的处理程序。(我对IPython不太了解,只知道CodeMirror,所以我不能指出找到和重写相关代码的正确方法。它们可能已经绑定了Down键,也可能重写了goLineDown 命令。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32544502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档