Modifica un file in due diversi buffer in emacs


28

Vorrei aprire il file foo.bardue volte (o più) in emacs, in modo da poterlo modificare contemporaneamente in due parti diverse. È possibile? Probabilmente la domanda migliore è: come si fa? C'è un modo per aprire ogni istanza nel suo buffer / frame?


È possibile visualizzare lo stesso buffer in finestre diverse. Non è una soluzione per questo problema?
Tom,

Risposte:


35

È possibile aprire lo stesso buffer in più di una finestra (che può essere distribuita tra frame diversi), ma non è molto conveniente. Ogni finestra ha il suo punto, ma condividono tutti il ​​segno, la modalità file, il restringimento e altre caratteristiche, perché a parte il punto praticamente tutte le caratteristiche sono legate al buffer. Inoltre, se ti capita di visitare un altro buffer in una finestra, perderai il tuo posto nel file.

È possibile creare un buffer indiretto che ha il proprio punto, segno, modalità e così via, ma lo stesso contenuto del buffer originale (e il salvataggio di entrambi i buffer scrive nello stesso file). Per creare un secondo buffer che è un clone del buffer corrente, eseguire M-x clone-indirect-buffer RET. Per aprire quel secondo buffer in una finestra diversa, è possibile digitare C-x 4 c.


3
Per chiarire: C-x 4 ccorre clone-indirect-buffer-other-window, quindi questo sarebbe usato al posto di clone-indirect-buffer, non seguendo quel comando. Tuttavia, sul mio sistema, entrambi questi comandi sembrano fare la stessa cosa.
SabreWolfy,

Vorrei poter capire come ricordare questo: - /
pedz,

@pedz C-x 4è il prefisso per Windows, cè per il clone . Puoi definire altri attacchi se preferisci. C-x cnon viene utilizzato nella configurazione predefinita, è possibile utilizzarlo se non si ha paura di colpire accidentalmente C-x C-cinvece. Definisco C-x 5 cdi clonare in un nuovo frame nel mio file init.
Gilles 'SO- smetti di essere malvagio'

8

Modalità schermo diviso: dove ctrl+ xsignifica tenere premuto il tasto ctrl e digitare una x. Quindi digitare il numero seguente.

ctrl+ x2 (divisione orizzontale)

o

ctrl+ x3 (divisione verticale)

Quindi puoi scorrere in modo indipendente sullo stesso file o aprire un altro buffer se lo desideri in uno di essi.

Per tornare a un singolo tipo di vista

ctrl+ x1

Se lo desideri, puoi dividere ogni schermata (sezione) tutte le volte che è necessario. Seleziona lo schermo che desideri prima dividere, quindi esegui una divisione orizzontale o verticale su di esso.


Yikes! Non dovresti includere la navigazione da tastiera tra i frame? C-x oscorre other-windowe scorre tra le "finestre" visibili in ogni "frame". (Usando la configurazione di emacs in cui le finestre del gestore delle finestre sono chiamate frame, e i pannelli separati al loro interno sono chiamati windows (lo so, lo so, ma non ne sono responsabile).)
dmckee,

Tendo a usare il mouse.
Matt H,

1

Emacs è distorto dai riquadri (finestre), non dai frame. È spesso desiderabile aprire lo stesso buffer in un altro frame, non solo un'altra finestra nello stesso frame. Ma C-x 5 cnon è associato per impostazione predefinita. Questo codice definisce la clone-indirect-buffer-other-framefunzione mancante :

(global-set-key [?\C-x ?5 ?c]
             '(lambda(newname display-flag)
               "Like `clone-indirect-buffer-other-window' but display in another frame."
               (interactive
                (progn
                  (if (get major-mode 'no-clone-indirect)
                      (error "Cannot indirectly clone a buffer in %s mode" mode-name))
                  (list (if current-prefix-arg
                            (read-buffer "Name of indirect buffer: " (current-buffer))) t)))
               (save-window-excursion
                 (let ((newbuf (clone-indirect-buffer newname display-flag)))
                   (switch-to-buffer-other-frame newbuf)
                   )
                 )
               )
            )
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.