Perché usare i buffer indiretti?


Risposte:


16

Per visualizzare e modificare più posizioni dello stesso buffer. Quindi, non è necessario scorrere un buffer lungo ma semplicemente passare la finestra alla regione visibile. Ogni buffer clonato presenta inoltre diversi contrassegni, restringimenti e altre proprietà del buffer. Se non si utilizza il buffer indiretto ma si crea un'altra finestra dello stesso buffer, tutto viene condiviso e non è possibile eseguire altre funzionalità avanzate oltre a visualizzare e modificare posizioni diverse. Ad esempio, con un buffer indiretto, è possibile piegare tutto il blocco di codice, creare in modo efficace un "albero di tag" senza influire sul buffer originale. Utilizzando una finestra, entrambi i buffer in entrambe le finestre vengono piegati perché entrambi i buffer sono uguali.

In conclusione, il buffer indiretto è un buffer completamente diverso che condivide lo stesso testo e file nel buffer originale, quindi quando si salva il buffer clonato, salva anche il file originale.


3
Sono d'accordo che i buffer indiretti hanno dei vantaggi. Ma il tuo primo punto non richiede che i buffer siano indiretti. È possibile visualizzare e modificare più posizioni dello stesso buffer anche se lo stesso buffer viene semplicemente aperto in due finestre. Ma sì, secondo me il restringimento indipendente, il pieghevole, ecc. Sono le caratteristiche forti di un buffer indiretto.
Kaushal Modi,

5
Modifica anche lo stesso buffer con più modalità (combina il buffer indiretto con il restringimento). Puoi modificare alcune parti di un buffer con le modalità markdown, un'altra parte con le modalità python, un'altra parte con le modalità json
freakhill

Puoi vedere più posizioni usando più finestre da solo, ma poiché in questa situazione esiste solo un valore di punto, il cambio di buffer non manterrà le posizioni in entrambe le finestre, ma solo una.
politza,

9

Un caso d'uso sta usando una diversa modalità principale su una parte di un file.

Ad esempio stavo lavorando contemporaneamente con documenti XML con codice all'interno di determinati elementi. Volevo essere in grado di modificare l'intero documento come se fosse xml, ma ho ancora tutte le principali funzionalità della modalità per il linguaggio di programmazione incorporato in alcuni elementi, quindi ho ristretto al corpo di quegli elementi in un buffer indiretto che stava eseguendo il modalità principale appropriata.

Ecco una funzione della mia configurazione che uso per fare questo:

(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: questo non è perfetto, cose come il blocco dei caratteri richiedono un lavoro speciale aggiuntivo per l'uso in questo scenario.


3

I buffer indiretti offrono più viste dello stesso buffer, in particolare più restringimenti, ognuno dei quali agisce, per molti aspetti, come un buffer separato.

Come narrow-indirect.eldice il Commentario per la biblioteca :

È possibile utilizzare buffer indiretti per più di quanto si pensi. È possibile utilizzare cloni prelevati da porzioni di buffer Dired, ad esempio, per offrire utili visualizzazioni (attive) in un elenco di directory. Esistono solo alcuni tasti / comandi (come l' gaggiornamento dell'elenco) che non funzionano, poiché dipendono da una vista dell'intero buffer Dired. Sperimenta e troverai sicuramente nuovi interessanti usi per i buffer indiretti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.