Первая строка буфера? Первая строка абзаца?
Несмотря на это, я думаю, что вы могли бы сделать это с вашим собственным второстепенным режимом, в котором вы сканируете буфер / регион так, как вам нравится. При сканировании вам нужно будет начать с начала, отметить местоположение, когда вы впервые видели каждое ключевое слово, выделить его и продолжить сканирование. если вы видите повторяющееся ключевое слово во время сканирования, не выделяйте его.
Я полагаю, что вы не можете сделать это с помощью простых шрифтов-ключевых слов. Они всегда являются ключевыми словами, независимо от того, где они появляются. Но вы можете сделать это с помощью специальных средств сопоставления шрифтов. Получите помощь по номеру font-lock-keywords
, и вы увидите:
Каждый элемент в списке ключевых слов на уровне пользователя должен иметь одну из следующих форм:
Сличитель
...
где MATCHER может быть либо регулярным выражением для поиска, либо именем функции для
вызов для выполнения поиска (вызывается с одним аргументом, предел поиска;
он должен вернуть не ноль, переместить точку и установить match-data
соответствующим образом, если
это удается; как re-search-forward
)
Эти функции сопоставления или регулярные выражения вызываются или оцениваются в произвольных позициях в буфере в, казалось бы, произвольные моменты времени. Использование регулярного выражения по этой причине не сработает, но, используя функцию, вы можете отсканировать обратно к началу буфера, re-search-forward
для ключевого слова и выяснить, видите ли вы это ключевое слово впервые, и затем примите соответствующие меры. Вы также можете кэшировать первое увиденное местоположение ключевого слова, а затем управлять кешем в хуке после изменения, но это становится довольно сложным.
РЕДАКТИРОВАТЬ при перечитывании я вижу, что вы пробовали эту последнюю идею, и она не работает для вас. странно.