Навіщо використовувати непрямі буфери?


Відповіді:


16

Щоб переглянути та відредагувати кілька місць одного буфера Отже, вам не потрібно прокручувати довгий буфер, а просто переключити вікно на видиму область. Кожен клонований буфер також має різні кільцеві, звужуючі та інші властивості буфера. Якщо ви не використовуєте непрямий буфер, але створюєте інше вікно того ж буфера, то все спільне, і ви не можете виконувати інші попередні функції, крім перегляду та редагування різних місць. Наприклад, за допомогою непрямого буфера ви можете скласти весь блок коду, ефективно створити «дерево тегів», не впливаючи на початковий буфер. За допомогою вікна обидва буфери в обох вікнах складаються, тому що обидва буфера однакові.

Підсумовуючи, непрямий буфер - це зовсім інший буфер, який має спільний доступ до одного тексту та файлу у вихідному буфері, тож коли ви зберігаєте клонований буфер, він також зберігає ваш вихідний файл.


3
Я згоден, що непрямі буфери мають переваги. Але для вашого першого пункту не потрібно, щоб буфери були непрямими. Ви можете бачити та редагувати декілька місць одного буфера, навіть якщо той самий буфер просто відкривається у двох вікнах. Але так, незалежне звуження, складання тощо є сильними особливостями непрямого буфера, на мою думку.
Каушал Моді

5
Також відредагуйте один і той же буфер у кількох режимах (поєднайте непрямий буфер із звуженням). Ви можете редагувати деякі частини буфера з режимами розмітки, іншу частину в режимах python, іншу частину з режимами json
freakhill

Ви можете бачити кілька локацій, використовуючи лише декілька вікон, але оскільки в цій ситуації є лише одне значення точки, комутація буферів не збереже розташування в обох вікнах, а лише одне.
politza

10

В одному випадку використання використовується інший основний режим в одній частині файлу.

Наприклад, я свого часу працював з 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)))

Примітка: це не ідеально, такі речі, як блокування шрифту, вимагають додаткової додаткової роботи для використання в цьому сценарії.


4

Непрямі буфери дають вам кілька переглядів одного буфера, зокрема, декілька звужень, кожне з яких багато в чому діє, як окремий буфер.

Як narrow-indirect.elйдеться у коментарі до бібліотеки :

Ви можете використовувати непрямі буфери більше, ніж ви могли подумати. Ви можете використовувати клони, взяті, наприклад, із порцій в'язаних буферів, щоб дати вам корисні (активні) перегляди у списку каталогів. Існує лише кілька клавіш / команд (наприклад, gдля оновлення списку), які не працюють, оскільки вони залежать від перегляду цілого буфера. Експериментуйте, і ви, без сумніву, знайдете цікаві нові можливості використання непрямих буферів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.