Edite un archivo en dos buffers diferentes en emacs

28

Me gustaría abrir el archivo foo.bardos veces (o más) en emacs, para poder editar dos partes diferentes al mismo tiempo. ¿Es posible? Probablemente la mejor pregunta es, ¿cómo hacerlo? ¿Hay alguna manera de abrir cada instancia en su propio búfer / marco?

Dror
fuente
Puede mostrar el mismo búfer en diferentes ventanas. ¿No es una solución para este problema?
Tom

Respuestas:

35

Puede abrir el mismo búfer en más de una ventana (que se puede distribuir entre diferentes marcos), pero no es muy conveniente. Cada ventana tiene su propio punto, pero todos comparten la marca, el modo de archivo, el estrechamiento y otras características, porque aparte del punto, casi todas las características están vinculadas con el búfer. Además, si visita otro búfer en una ventana, perderá su lugar en el archivo.

Puede crear un búfer indirecto que tenga su propio punto, marca, modos, etc., pero el mismo contenido que el búfer original (y guardar cualquiera de los búferes escritos en el mismo archivo). Para crear un segundo búfer que sea un clon del búfer actual, ejecute M-x clone-indirect-buffer RET. Para abrir ese segundo búfer en una ventana diferente, puede escribir C-x 4 c.

Gilles 'SO- deja de ser malvado'
fuente
3
Para aclarar: se C-x 4 cejecuta clone-indirect-buffer-other-window, por lo que esto se usaría en lugar de clone-indirect-bufferno seguir ese comando. Sin embargo, en mi sistema, ambos comandos parecen hacer lo mismo.
SabreWolfy
Desearía poder descubrir cómo recordar esto: - /
pedz
@pedz C-x 4es el prefijo para Windows, ces para clonar . Puede definir otros enlaces si lo prefiere. C-x cno se usa en la configuración predeterminada, puede usarlo si no tiene miedo de golpear accidentalmente C-x C-c. Defino C-x 5 cclonar en un nuevo marco en mi archivo de inicio.
Gilles 'SO- deja de ser malvado'
8

Modo de pantalla dividida: donde ctrl+ xsignifica mantener presionada la tecla Ctrl y escribir una x. Luego escriba el número siguiente.

ctrl+ x2 (división horizontal)

o

ctrl+ x3 (división vertical)

Luego puede desplazarlos independientemente en el mismo archivo o abrir otro búfer si lo desea en uno de ellos.

Para volver a una vista única, escriba

ctrl+ x1

Si lo desea, puede dividir cada pantalla (sección) tantas veces como sea necesario. Seleccione primero la pantalla que desea dividir y luego realice una división horizontal o vertical en ella.

Matt H
fuente
¡Ay! ¿No deberías incluir la navegación del teclado entre cuadros? C-x ocorre other-windowy recorre las "ventanas" visibles en cada "marco". (Uso de la configuración de emacs, donde las ventanas del gestor de ventanas se llaman marcos y los paneles separados dentro de ellos se llaman ventanas (lo sé, lo sé, pero no soy responsable de ella).)
dmckee
Tiendo a usar el mouse.
Matt H
1

Emacs está sesgado a los paneles (ventanas), no a los marcos. A menudo es deseable abrir el mismo búfer en otro marco, no solo otra ventana en el mismo marco. Pero C-x 5 cestá sin consolidar por defecto. Este código define la clone-indirect-buffer-other-framefunción que falta :

(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)
                   )
                 )
               )
            )
Andreas Spindler
fuente