我正在阅读一堆使用#(到行尾)注释的MySQL文件,但我的sql-mode不支持它们。我找到了定义/**/和--注释的sql.el语法表部分,但根据此文,Emacs语法表只支持两种注释样式。
是否有一种简单的方法在sql.el中添加对#注释的支持?
是否有一种简单的方法在sql.el中添加对#注释的支持?
Emacs-24的sql.el已经内置了这个功能!只需运行M-x sql-set-product MySQL RET
,语法表就会自动设置好,所有其他保留字和类型的字体锁定关键字,交互模式等都会自动设置。太棒了!
如果在菜单栏下查看SQL
,您可以使用Product
子菜单来选择MySQL
。
您还可以使用M-x customize-variable sql-product RET
来将默认产品设置为非ANSI产品。
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))
set-syntax-table
是多余的。 - Stefan您可以定义 ?# 作为注释样式 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)
C-h i m elisp RET m syntax flags RET
。如果您有一个较新的Emacs,它会说:注释样式是一组标志'b'、'c'和'n',因此最多可以有8种不同的注释样式。
但当然,在这种特定情况下,这是无关紧要的,因为#...\n
和--...\n
被视为1个样式(因为您不能有属于两种不同样式的注释开头(或结尾))。 - Stefan