2009-01-27 3 views
3

Я читаю кучу файлов MySQL, которые используют комментарии # (to end-of-line), но мой SQL-режим не поддерживает их. Я нашел таблицу синтаксических таблиц sql.el, которая определяет/**/и - комментарии, но согласно this, таблицы синтаксиса Emacs поддерживают только 2 стиля комментариев.Как заставить Emacs sql-mode распознавать комментарии MySQL # -style?

Есть ли способ добавить поддержку # комментариев в sql.el легко? ?

+0

Вместо поиска zvon.org вы можете использовать документ, который поставляется вместе с вашим Emacs: 'C-h i m elisp RET m синтаксические флаги RET'. Если у вас есть недавний Emacs, он скажет: «Стиль комментариев - это набор флагов« b »,« c »и« n », поэтому может быть до 8 разных стилей комментариев.« Но, конечно, в этот частный случай это не имеет значения, так как '# ... \ n' и' --... \ n' считаются 1 стилем (поскольку у вас не может быть стартер комментариев (или ender), который принадлежит двум различным стили). – Stefan

ответ

1

Вы можете определить # начать комментарий в стиле б, а это значит, есть два способа запуска альтернативного стиля комментарий (или - или #):

 
(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)

2

Ответ Рольфа, похоже, не работает для меня. 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

+0

Это сработало для меня, но потом я обнаружил, что поддержка MySQL встроена в Emacs-24 !! См. Мой ответ для деталей. – kbro

+1

«set-syntax-table» в вашей функции является избыточным. – Stefan

2

Emacs-24 sql.el имеет этот встроенный! Просто запустите M-x sql-set-product MySQL RET, и таблица синтаксиса настроена автоматически, как и ключевые слова для блокировки шрифтов для всех дополнительных зарезервированных слов и типов, интерактивный режим и т. Д. И т. Д. Блестящий !!

Если вы смотрите под SQL в строке меню, вы можете использовать подменю Product, чтобы выбрать MySQL.

Вы также можете указать M-x customize-variable sql-product RET, чтобы установить продукт по умолчанию в ANSI.