2009-01-27 79 views
3

我正在读一堆使用#(到行尾)注释的MySQL文件,但我的sql模式不支持它们。我发现sql.el的语法表部分定义了/ ** /和 - 注释,但根据this,Emacs语法表仅支持2种注释样式。如何让Emacs的sql模式识别MySQL#样式的注释?

有没有办法在sql.el中轻松添加对#注释的支持? ?

+0

与其查阅zvon.org,您可以使用Emacs附带的文档:`C-h我的ELISP RET m语法标志RET`。如果你有一个最新的Emacs,它会说:`评论风格是一组标志'b','c'和'n',所以可以有多达8种不同的评论风格。'但是当然,在这种情况是无关紧要的,因为`#... \ n`和`--... \ n`被认为是1样式(因为你不能有一个属于两个不同的注释启动器样式)。 – Stefan 2014-11-21 14:28:35

回答

1

可以定义#开始注释风格的B,这意味着有启动替代注释风格的两种方式(无论是 - 或#):

 
(setq sql-mode-syntax-table 
    (let ((table (make-syntax-table))) 
    ;; C-style comments /**/ (see elisp manual "Syntax Flags")) 
    (modify-syntax-entry ?/ ". 14" table) 
    (modify-syntax-entry ?* ". 23" table) 
    ;; double-dash starts comments 
    (modify-syntax-entry ?- ". 12b" table) 
    (modify-syntax-entry ?# " b" table) 
    (modify-syntax-entry ?\f "> b" table) 
    ;; single quotes (') delimit strings 
    (modify-syntax-entry ?' "\"" table) 
    ;; double quotes (") don't delimit strings 
    (modify-syntax-entry ?\" "." table) 
    ;; backslash is no escape character 
    (modify-syntax-entry ?\\ "." table) 
    table)) 

(这是从SQL复制。埃尔和修改,这意味着这是GPL)

2

Rolf的答案似乎不适用于我。 AFAIK,开始评论的角色类别,备选评论风格应该是“< b”,而不是“b”。这个我用什么:

(add-hook 'sql-mode-hook 'my-sql-mode-hook) 
    (defun my-sql-mode-hook() 
     ;; Make # start a new line comment in SQL. This is MySQL-specific 
     ;; syntax. 
     (modify-syntax-entry ?# "< b" sql-mode-syntax-table)) 
+0

这个解决方案为我做了诀窍。谢谢@arvixx! v24.2.50.1 – willwillis 2012-09-28 02:52:36

2

Emacs-24 sql.el有这个内置的!只需运行M-x sql-set-product MySQL RET即可自动设置语法表,所有其他保留字和类型的字体锁定关键字,交互模式等等都是自动设置的。辉煌!

如果您在菜单栏中查看SQL,则可以使用Product子菜单来选择MySQL

您也可以使用M-x customize-variable sql-product RET将默认产品设置为远离ANSI。