Как выделить серым цветом строки «// комментарий» в Emacs?

#regex #emacs

#регулярное выражение #emacs

Вопрос:

Проблема с регулярным выражением в Emacs: как выделить все строки, начинающиеся с «//»?

Я хотел бы выделить серым цветом свои комментарии в текстовом режиме, но следующий фрагмент, похоже, не работает:

 (add-hook 'text-mode-hook
(lambda()
  (font-lock-add-keywords nil
  '(("^//. "
     1 font-lock-comment-face prepend)))))
 

‘Re-builder’ указал, что такого рода выражения должны делать свое дело. Что не так? Спасибо!

Комментарии:

1. Вы должны опубликовать свое решение в качестве ответа и принять его самостоятельно. Таким образом, другие пользователи с той же проблемой найдут ваш вопрос и увидят, что на него был дан ответ.

2. Готово, спасибо за совет. Я нашел решение сразу после публикации и — из нетерпения — хотел опубликовать его сразу. Но мне не разрешили, и, следовательно, редактирование. Извините, больше этого не повторится.

3. @mart: Все в порядке. Теперь все прекрасно отсортировано.

Ответ №1:

Хорошо, я понял это. "^\(//.*\)$" выполняет свою работу.

Извините за возможный «спам». Я гуглил почти два часа заранее; регулярные выражения, похоже, просто выше моей головы.

Комментарии:

1. 1: К вашему сведению, проблема здесь в том, что вариант синтаксиса RE в Emacs использует ( и ) для захвата круглых скобок (многие другие варианты используют ( и ) , но не здесь). Эти буквальные обратные косые черты должны быть удвоены в строке в программном коде.

2. Да, спасибо за объяснение; это то, что я (наконец) тоже понял.

Ответ №2:

Поскольку регулярное выражение соответствует всему, к чему должно быть применено выделение, существует альтернативный метод:

 (add-hook 'text-mode-hook
(lambda()
  (font-lock-add-keywords nil
  '(("^//. "
     0 font-lock-comment-face prepend)))))
 

0 Говорится, что нужно использовать полное совпадение (в отличие 1 от первого подшаблона и т. Д.)


Имейте в виду, если вы пишете режим emacs, то способ, которым они это делают, заключается в определении подходящей синтаксической таблицы, которая объявляет подобные вещи комментарием, а затем настраивает маркер для использования лица комментария для комментариев. (Я думаю, что он делает это по умолчанию, если вообще включен.) Учебное пособие по написанию основных режимов охватывает полные комментарии в стиле C и говорит кое-что о том, как сделать это самостоятельно.

Комментарии:

1. Спасибо. Я не пишу режим, мне просто нужно немного настроить режим Markdown. Я в основном пишу текст (не код), а «//» — мой предпочтительный синтаксис для комментариев. Теперь, когда оно выделено серым цветом, это все, что мне сейчас нужно. Тем не менее, я обязательно когда-нибудь сам изучу режимы записи.

2. @mart: Хорошо, я не мог сказать наверняка, и поэтому я упомянул об этом. 🙂