假设我在单个缓冲区中有多种语言的代码,我可以根据相应的语言使用emacs语法突出显示每个代码段吗?
例如,以下代码是python脚本的一部分,但它包含sql代码:
import psycopg2 as pg import pandas.io.sql as psql # Some sql code: my_query =''' select count(distinct s.object_uid) from dx.dx_segment as s; ''' # end of sql code dataframe = psql.frame_query(my_query,connection)
解决方法
当我在C中使用一些sql时,我有一个使用MMM模式的系统;将所需语句包装在一组注释中,
/* sql */
和
/* #sql */
以下将给我sql语法高亮:
(require 'mmm-mode) (set-face-background 'mmm-default-submode-face nil) (mmm-add-classes '((embedded-sql :submode sql-mode :front "/* sql */" :back "/* #sql */"))) (mmm-add-mode-ext-class 'c-mode "*.c" 'c-sql) (setq mmm-never-modes (append '(ediff-mode) '(text-mode) mmm-never-modes))
然后我可以使用mmm-ify-by-class来应用c-sql类 – 也许你可以在Python中做类似的事情?
对我来说,以下lisp允许Emacs将示例python中的示例sql字符串看作sql(浅灰色背景表示MMM模式处于活动状态)
(再次修改以允许单行语句)
(require 'mmm-mode) (mmm-add-classes '((python-sql :submode sql-mode :face mmm-code-submode-face :front "# sql\\(\n\\|\t\\)*\\(\[ -_A-Z0-9\]+\\)\\(\[ =\]\\)\\(\"\"\"\\|'''\\)" :back "\\(\"\"\"\\|'''\\)\\( \\|\t\\|\n\\)*\\# /sql"))) (mmm-add-mode-ext-class 'python-mode "*.py" 'python-sql)