我正在构建一个IPython单元魔术来支持交互式SQL查询,并希望该单元格的语法高亮显示从Python更改为SQL。实现这一目标的最佳方法是什么?
想象一下以下输入单元格:
%%sqlite example.db
SELECT id,name FROM Users;
目前,查询被解析为Python代码,结果很混乱。
特别是,是否支持Notebook格式的language
参数?官方文档(R,Ruby,Octave,..)支持的单元格魔术似乎都没有从"python"
更改它。
答案 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)
为我工作。