Ctrl + P和Ctrl + N用于在jupyter笔记本中导航

时间:2017-01-09 11:59:06

标签: ipython-notebook jupyter-notebook

我习惯于Emacs导航,特别是 Ctrl + P N F ,以及 B ,但我现在也习惯了Jupyter笔记本。一般问题是:如何在笔记本中启用这些快捷方式?

让我感到震惊的是,在Mac上,这些键绑定已经在标准的Anaconda IPython中使用了。但它完全可以理解,因为大多数系统和浏览器快捷方式都绑定到 Cmd 而不是 Ctrl

由于我在Ubuntu上花了很多时间,我想在这里重现相同的行为。很快就发现大多数浏览器非常重视一些键绑定,例如 Ctrl + P 用于打印或 Ctrl + N 用于新窗口。关闭它们本身就是一个大问题,因此我决定仅使用另一个浏览器用于Jupyter笔记本,而Vivaldi似乎是一个不错的选择,因为所有快捷方式都可以在那里轻松定制。

我相信,关闭浏览器快捷方式后,IPython语法会启动,但没有发生过这样的事情。接下来,我尝试了Jupyter笔记本快捷方式定制的许多手册中的一个(例如这个http://jupyter-notebook.readthedocs.io/en/latest/examples/Notebook/Custom%20Keyboard%20Shortcuts.html)来绑定我需要的4个快捷方式。它只在某种程度上起作用,并且仅在Jupyter内联魔法中起作用:

%%javascript 

Jupyter.keyboard_manager.command_shortcuts.add_shortcut('ctrl-p', 'jupyter-notebook:move-cursor-up')

它的作用是偶尔我按下ctrl-p时命令模式下的光标确实向上移动,但这种行为是不稳定的。此外,在它移动后,它立即进入上面单元格中的编辑模式,如果我只是按“向上”箭头,则不会发生这种情况。至于编辑模式的相同技巧:

%%javascript 

Jupyter.keyboard_manager.edit_shortcuts.add_shortcut('ctrl-p', 'jupyter-notebook:move-cursor-up')
唉,它根本不起作用。

原谅我的长篇介绍。我现在的问题是:

  1. 我在内联模式中使用的键绑定有什么问题?这是我犯的一个愚蠢的错误还是一个Jupyter故障?

  2. 当我尝试通过我的custom.js文件使用这些byndings时,它们不起作用。但是,文件本身是可识别的,例如alert()命令工作正常。

  3. 我在CodeMirror的emacs绑定上偶然发现了几次,但据我所知,它们主要用于复制粘贴相关事项而不是导航,这是真的吗?使用这组绑定而不是使用custom.js追踪路径会有帮助吗?

  4. 谢谢。

    UPD

    从CodeMirror安装emacs.js并添加此代码实际上解决了我的问题。只需要确保所有冲突的浏览器键绑定都已关闭。

    require(["codemirror/keymap/emacs", "notebook/js/cell", "base/js/namespace"],
        function(emacs_keymap, cell, IPython) {
            cell.Cell.options_default.cm_config.keyMap = 'emacs';
            var cells = IPython.notebook.get_cells();
            for(var c=0; c< cells.length ; c++){
                cells[c].code_mirror.setOption('keyMap', 'emacs');
            }
        }
    );
    

0 个答案:

没有答案