#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: Хорошо, я не мог сказать наверняка, и поэтому я упомянул об этом. 🙂