非Python语言语法突出显示?

时间:2014-07-12 05:06:43

标签: ipython-notebook

我正在构建一个IPython单元魔术来支持交互式SQL查询,并希望该单元格的语法高亮显示从Python更改为SQL。实现这一目标的最佳方法是什么?

想象一下以下输入单元格:

%%sqlite example.db

SELECT id,name FROM Users;

目前,查询被解析为Python代码,结果很混乱。

特别是,是否支持Notebook格式的language参数?官方文档(RRubyOctave,..)支持的单元格魔术似乎都没有从"python"更改它。

2 个答案:

答案 0 :(得分:3)

我正在运行Jupyter 4(确切地说是4.2.0),并且在~/.jupyter/custom/custom.js中放入以下代码对我来说非常有效。

IPython.notebook.events.one('kernel_ready.Kernel',
    function(){
        IPython.CodeCell.config_defaults
               .highlight_modes['magic_text/x-mssql'] = {'reg':[/^%%sql/]} ;
        IPython.notebook.get_cells().map(
            function(cell){
                if (cell.cell_type == 'code'){
                    cell.auto_highlight();
                }
            }) ;
    }) ;

更新

笔记本的新版本(我现在使用5.2.2)使用稍微不同的键进行配置, codecell.CodeCell.options_default.highlight_modes
我目前使用的代码(仍在custom.js中)如下所示:

require(['notebook/js/codecell'],
    function(codecell) {
        codecell.CodeCell.options_default
            .highlight_modes['magic_text/x-mssql'] = {'reg':[/^%%sql/]} ;
        Jupyter.notebook.events.one('kernel_ready.Kernel',
            function(){
                Jupyter.notebook.get_cells().map(
                    function(cell){
                        if (cell.cell_type == 'code'){
                            cell.auto_highlight();
                        }
                    }) ;
            });
    });

答案 1 :(得分:2)

找到this

import IPython
js = "IPython.CodeCell.config_defaults.highlight_modes['magic_sql'] = {'reg':[/^%%sql/]};"
IPython.core.display.display_javascript(js, raw=True)

为我工作。