замените регулярное выражение r на R, если курсор не находится на r в emacs - PullRequest
2 голосов
/ 16 августа 2010

Предположим, вы посещаете файл F в буфере Emacs B, пусть r и R - некоторые регулярные выражения для замены. Теперь я хочу заменить все вхождения строк r_i, которые соответствуют r (в некоторой области), соответствующей строкой замены R_i, определенной R, так что выполняются следующие условия:

  • если я сохраню F, указанная выше замена не должна изменять содержание F
  • если курсор находится над текстом, который был заменен на R, он должен показывать исходный r_1, который соответствует r. Если я сделаю это, отредактируйте r_1 в r_2 и переместите курсор в сторону, r_2 должен быть заменен на соответствующий R_2, если он соответствует r.

Было бы неплохо, если бы можно было выделить (например, другим цветом или подчеркнуть ...) замены и управлять этим выделением в зависимости от r.

Я полагаю, что такая функциональность уже существует, но я не знаю, как она называется. То, что я описал выше, чем-то похоже на режим предварительного просмотра для редактирования латексных файлов.

Ответы [ 2 ]

3 голосов
/ 17 августа 2010

Похоже, вы просто хотите, чтобы некоторые строки отображались по-другому, а не какая-либо фактическая замена.Я думаю, что font-lock-mode может удовлетворить ваши требования.Например, вы можете иметь все вхождения слова «pi» в буфере, отображаемые как греческая буква π, оценив это в буфере:

(font-lock-add-keywords 
  nil `(("\\<pi\\>" (0 `(face default display "π")))))
(push 'display font-lock-extra-managed-props)

Ch v font-lock-Keywords даст больше деталей.

1 голос
/ 17 августа 2010

Я не знаю ни одной функции уровня пользователя, чтобы сделать это. Есть hi-lock-mode, который позволяет вам выделить какой-то текст, но не показывать текст для замены.

Функция уровня программиста, используемая режимом предварительного просмотра и другими пакетами, которые приводят к отображению текста, отличного от того, что находится в буфере, называется наложением. Если вы хотите закодировать это, это выглядело бы примерно так: для каждого вхождения r поместите наложение в этот вхождение r с исходным текстом r_1 в качестве свойства help-echo, r_2 в качестве свойства display, a modification-hooks свойство, которое реагирует на любое изменение, плюс, вероятно, свойство face или category.

...