¿Por qué usar tampones indirectos?

Respuestas:

16

Para ver y editar múltiples ubicaciones del mismo búfer. Por lo tanto, no tiene que desplazarse por un búfer largo, sino simplemente cambiar la ventana a la región visible. Cada búfer clonado también tiene diferentes marcas de anillo, estrechamiento y otras propiedades del búfer. Si no usa el búfer indirecto pero crea otra ventana del mismo búfer, todo se comparte y no puede realizar otras funciones avanzadas más allá de ver y editar diferentes ubicaciones. Por ejemplo, con un búfer indirecto, puede doblar todo el bloque de código, crear efectivamente un "árbol de etiquetas" sin afectar el búfer original. Usando una ventana, ambos búferes en ambas ventanas se pliegan porque ambos son iguales.

En resumen, el búfer indirecto es un búfer completamente diferente que comparte el mismo texto y archivo en su búfer original, por lo que cuando guarda el búfer clonado, también guarda su archivo original.

Tu Do
fuente
3
Estoy de acuerdo en que los amortiguadores indirectos tienen beneficios. Pero su primer punto no necesita que los búferes sean indirectos. Puede ver y editar múltiples ubicaciones del mismo búfer, incluso si el mismo búfer simplemente se abre en dos ventanas. Pero sí, en mi opinión, las características fuertes de un amortiguador indirecto son las características de un amortiguador indirecto.
Kaushal Modi
55
Edite también el mismo búfer con múltiples modos (combine el búfer indirecto con el estrechamiento). Puede editar algunas partes de un búfer con modos de reducción, otra parte con modos de python, otra parte con modos json
freakhill
Puede ver múltiples ubicaciones usando múltiples ventanas solo, pero dado que solo hay un valor de punto en esta situación, el cambio de buffers no preservará las ubicaciones en ambas ventanas, sino solo una.
politza
9

Un caso de uso es usar un modo principal diferente en una parte de un archivo.

Por ejemplo, en un momento estaba trabajando con documentos xml con código dentro de ciertos elementos. Quería poder editar todo el documento como si fuera xml, pero aún tengo todas las características principales del modo para el lenguaje de programación incrustado en ciertos elementos, así que me limité al cuerpo de esos elementos en un búfer indirecto que ejecutaba el modo principal apropiado.

Aquí hay una función de mi configuración que uso para hacer esto:

(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)))

Nota: esto no es perfecto, cosas como el bloqueo de fuente requieren un trabajo adicional especial para su uso en este escenario.

Jordon Biondo
fuente
3

Los búferes indirectos le brindan múltiples vistas del mismo búfer, en particular, múltiples reducciones, cada una de las cuales actúa, en muchos aspectos, como un búfer separado.

Como narrow-indirect.eldice el Comentario para la biblioteca :

Puedes usar buffers indirectos por más de lo que piensas. Puede usar clones tomados de porciones de buffers Dired, por ejemplo, para darle vistas útiles (activas) en una lista de directorios. Solo hay unas pocas teclas / comandos (como gpara actualizar la lista) que no funcionan, porque dependen de una vista de todo el búfer Dired. Experimente, y sin duda encontrará nuevos usos interesantes para los amortiguadores indirectos.

Dibujó
fuente