Замена текста буфера
Вы можете использовать следующую функцию для замены текста одного буфера текстом другого буфера:
- Команда: replace-buffer-contents source &optional max-secs max-costs
-
Эта функция заменяет доступную часть текущего буфера доступной частью буфера 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.
- Функция: replace-region-contents beg end replace-fn &optional max-secs max-costs
-
Эта функция заменяет область между beg и end с помощью заданной replace-fn. Функция replace-fn выполняется в текущем буфере, суженном до указанной области, и должна возвращать либо строку, либо буфер, заменяющий область.
Замена выполняется с помощью
replace-buffer-contents(см. выше), которая также описывает аргументы max-secs и max-costs и значение возврата.Примечание: если замена является строкой, она будет помещена во временный буфер, чтобы
replace-buffer-contentsмогла работать с ней. Поэтому, если у вас уже есть замена в буфере, нет смысла преобразовывать ее в строку с помощьюbuffer-substringили аналогичных функций.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Replacing.html