Які переваги використання непрямих буферів ? За яких обставин вони корисні?
Які переваги використання непрямих буферів ? За яких обставин вони корисні?
Відповіді:
Щоб переглянути та відредагувати кілька місць одного буфера Отже, вам не потрібно прокручувати довгий буфер, а просто переключити вікно на видиму область. Кожен клонований буфер також має різні кільцеві, звужуючі та інші властивості буфера. Якщо ви не використовуєте непрямий буфер, але створюєте інше вікно того ж буфера, то все спільне, і ви не можете виконувати інші попередні функції, крім перегляду та редагування різних місць. Наприклад, за допомогою непрямого буфера ви можете скласти весь блок коду, ефективно створити «дерево тегів», не впливаючи на початковий буфер. За допомогою вікна обидва буфери в обох вікнах складаються, тому що обидва буфера однакові.
Підсумовуючи, непрямий буфер - це зовсім інший буфер, який має спільний доступ до одного тексту та файлу у вихідному буфері, тож коли ви зберігаєте клонований буфер, він також зберігає ваш вихідний файл.
В одному випадку використання використовується інший основний режим в одній частині файлу.
Наприклад, я свого часу працював з xml-документами з кодом всередині певних елементів. Я хотів би мати можливість редагувати весь документ так, ніби це XML, але все ж маю всі основні функції режиму мови програмування, вбудовані в певні елементи, тому я звузив тіло цих елементів у непрямому буфері, на якому було запущено відповідний основний режим.
Ось функція з моєї конфігурації, яку я використовую для цього:
(defun indirect-region (start end)
"Edit the current region in another indirect buffer.
Prompt for a major mode to activate."
(interactive "r")
(let ((buffer-name (generate-new-buffer-name "*indirect*"))
(mode (intern
(completing-read
"Mode: "
(mapcar (lambda (e)
(list (symbol-name e)))
(apropos-internal "-mode$" 'commandp))
nil t))))
(pop-to-buffer (make-indirect-buffer (current-buffer) buffer-name))
(funcall mode)
(narrow-to-region start end)
(goto-char (point-min))
(shrink-window-if-larger-than-buffer)))
Примітка: це не ідеально, такі речі, як блокування шрифту, вимагають додаткової додаткової роботи для використання в цьому сценарії.
Непрямі буфери дають вам кілька переглядів одного буфера, зокрема, декілька звужень, кожне з яких багато в чому діє, як окремий буфер.
Як narrow-indirect.el
йдеться у коментарі до бібліотеки :
Ви можете використовувати непрямі буфери більше, ніж ви могли подумати. Ви можете використовувати клони, взяті, наприклад, із порцій в'язаних буферів, щоб дати вам корисні (активні) перегляди у списку каталогів. Існує лише кілька клавіш / команд (наприклад,
g
для оновлення списку), які не працюють, оскільки вони залежать від перегляду цілого буфера. Експериментуйте, і ви, без сумніву, знайдете цікаві нові можливості використання непрямих буферів.