Edit IPython cell in an external editor

前端 未结 4 1127
灰色年华
灰色年华 2021-02-03 12:45

It would be great to have a keyboard short-cut in IPython notebook, which would allow to edit the content of the current cell in an external editor (e.g. gvim). Maybe just copy

4条回答
  •  既然无缘
    2021-02-03 13:18

    This is what I came up with. I added 2 shortcuts:

    • 'g' to launch gvim with the content of the current cell (you can replace gvim with whatever text editor you like).
    • 'u' to update the content of the current cell with what was saved by gvim.

    So, when you want to edit the cell with your preferred editor, hit 'g', make the changes you want to the cell, save the file in your editor (and quit), then hit 'u'.

    Just execute this cell to enable these features:

    %%javascript
    
    IPython.keyboard_manager.command_shortcuts.add_shortcut('g', {
        handler : function (event) {
            var input = IPython.notebook.get_selected_cell().get_text();
            var cmd = "f = open('.toto.py', 'w');f.close()";
            if (input != "") {
                cmd = '%%writefile .toto.py\n' + input;
            }
            IPython.notebook.kernel.execute(cmd);
            cmd = "import os;os.system('gvim .toto.py')";
            IPython.notebook.kernel.execute(cmd);
            return false;
        }}
    );
    
    IPython.keyboard_manager.command_shortcuts.add_shortcut('u', {
        handler : function (event) {
            function handle_output(msg) {
                var ret = msg.content.text;
                IPython.notebook.get_selected_cell().set_text(ret);
            }
            var callback = {'output': handle_output};
            var cmd = "f = open('.toto.py', 'r');print(f.read())";
            IPython.notebook.kernel.execute(cmd, {iopub: callback}, {silent: false});
            return false;
        }}
    );
    

提交回复
热议问题