在 jupyter notebook 中禁用 Ctrl+Enter sublime keymap

Disable Ctrl+Enter sublime keymap in jupyter notebook

我将 Jupyter Notebook 与 Sublime Text 键盘映射一起使用,方法是将以下内容添加到我的 Jupyter custom.js:

require(["codemirror/keymap/sublime", "notebook/js/cell"], 
function(sublime_keymap, cell) {
    cell.Cell.options_default.cm_config.keyMap = 'sublime';
});

...大部分情况下效果很好,除了我在 Windows 机器上,这将 "insertLineAfter" 的 Sublime 功能添加到 Ctrl+Enter 的绑定中,我不这样做不需要,因为 Ctrl+Enter 是在 Jupyter 中执行当前单元格的绑定。

有谁知道如何禁用 Ctrl+Enter 的 "insertLineAfter" 绑定吗?

可以使用 Default (OS).sublime-keymap 文件中的 unbound 命令禁用单个 Sublime Text 键绑定。即 Menu --> Preferences --> Key Bindings - User。在您的情况下,只需添加以下行。

{ "keys": ["ctrl+enter"], "command": "unbound" },

由于 Add Line.sublime-macro 非常有用,您可能希望给它另一个绑定,例如,您可以使用 alt+entersuper+enter,在这种情况下,您可以添加以下内容。

{ "keys": ["ctrl+enter"], "command": "unbound" },

{ "keys": ["alt+enter"], "command": "run_macro_file", "args": 
    {"file": "res://Packages/Default/Add Line.sublime-macro"} },

您可以通过注释掉以下行来防止 ctrl+enter 在 jupyter notebook 中产生新行:

cmds[map[ctrl + "Enter"] = "insertLineAfter"] = function(cm) { insertLine(cm, false); };

在文件中:

[python lib path]/dist-packages/notebook/static/components/codemirror/keymap/sublime.js

以下对我有用:

require(["codemirror/keymap/sublime", "notebook/js/cell", "base/js/namespace"],
    function(sublime_keymap, cell, IPython) {
        cell.Cell.options_default.cm_config.keyMap = 'sublime';
        cell.Cell.options_default.cm_config.extraKeys["Ctrl-Enter"] = function(cm) {}
        var cells = IPython.notebook.get_cells();
        for(var cl=0; cl< cells.length ; cl++){
            cells[cl].code_mirror.setOption('keyMap', 'sublime');
            cells[cl].code_mirror.setOption("extraKeys", {
                "Ctrl-Enter": function(cm) {}
            });
        }
    } 
);