如何让Emacs的sql-mode识别MySQL的#-style注释?

3
我正在阅读一堆使用#(到行尾)注释的MySQL文件,但我的sql-mode不支持它们。我找到了定义/**/和--注释的sql.el语法表部分,但根据此文,Emacs语法表只支持两种注释样式。
是否有一种简单的方法在sql.el中添加对#注释的支持?

不必查找zvon.org,您可以使用随附于Emacs的文档:C-h i m elisp RET m syntax flags RET。如果您有一个较新的Emacs,它会说:注释样式是一组标志'b'、'c'和'n',因此最多可以有8种不同的注释样式。但当然,在这种特定情况下,这是无关紧要的,因为#...\n--...\n被视为1个样式(因为您不能有属于两种不同样式的注释开头(或结尾))。 - Stefan
3个回答

4

Emacs-24的sql.el已经内置了这个功能!只需运行M-x sql-set-product MySQL RET,语法表就会自动设置好,所有其他保留字和类型的字体锁定关键字,交互模式等都会自动设置。太棒了!

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

您还可以使用M-x customize-variable sql-product RET来将默认产品设置为非ANSI产品。


2

Rolf的答案对我似乎没有起作用。据我所知,替代注释样式的起始注释字符类应为"< 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))

这个解决方案对我很有帮助。谢谢@arvixx!v24.2.50.1 - willwillis
这对我有用,但后来我发现MySQL支持是内置在Emacs-24中的!请查看我的答案以获取详细信息。 - kbro
1
你的函数中的 set-syntax-table 是多余的。 - Stefan

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.el 并进行了修改,这意味着它是 GPL)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接