Вы можете использовать следующую функцию для замены текста одного буфера текстом другого буфера:
Эта функция заменяет доступную часть текущего буфера
доступной частью буфера source. source
может быть либо объектом буфера, либо именем буфера. Когда
replace-buffer-contents выполняется успешно, текст доступной
части текущего буфера будет равен тексту доступной части буфера source.
Эта функция пытается сохранить позицию курсора, маркеры, свойства текста и
наложения в текущем буфере. Один потенциальный случай, когда это поведение
является полезным, — это внешние программы форматирования кода: они
обычно записывают отформатированный текст во временный буфер или файл,
и использование delete-region и insert-buffer-substring
уничтожило бы эти свойства. Однако последнее сочетание обычно быстрее (см. Удаление текста и Вставка текста).
Для своей работы replace-buffer-contents необходимо сравнить
содержимое исходного буфера с содержимым source, что является
операцией, требующей больших затрат, если буферы огромны и между ними
есть большое количество различий. Чтобы сохранить время выполнения
replace-buffer-contents в пределах нормы, у него есть два
необязательных аргумента.
max-secs определяет жесткий предел во времени. Если он задан
и превышен, функция перейдет к использованию delete-region и
insert-buffer-substring.
max-costs определяет качество вычисления различий. Если фактические затраты превышают этот лимит, используются эвристики для предоставления более быстрого, но субоптимального решения. Значение по умолчанию равно 1000000.
replace-buffer-contents возвращает t, если
возможно выполнить замену без разрушения. В противном случае, то есть если
превышен max-secs, он возвращает nil.
Эта функция заменяет область между beg и end используя заданную replace-fn. Функция replace-fn выполняется в текущем буфере, суженном до указанной области, и должна вернуть либо строку, либо буфер, заменяющий область.
Замена выполняется с помощью replace-buffer-contents (см.
выше), которая также описывает аргументы max-secs и max-costs
и возвращаемое значение.
Примечание: Если замена представляет собой строку, она будет помещена во
временный буфер, чтобы replace-buffer-contents мог с ней работать.
Поэтому, если у вас уже есть замена в буфере, нет смысла преобразовывать ее в
строку с помощью buffer-substring или аналогичных функций.