Emacs - Múltiples columnas un búfer


165

Estoy tratando de editar un código de ensamblaje que tiende a formatearse en listados largos pero delgados. Me gustaría poder usar algunos de los acres de espacio horizontal que tengo y ver más código en pantalla al mismo tiempo. ¿Hay algún método para hacer que Emacs (u otro editor) me muestre varias columnas que apuntan al mismo búfer?

Cx 3 (emacs) y: vsplit (vim) son excelentes para múltiples vistas separadas en el código, pero me gustaría que fluya de una columna a otra (como el texto en un periódico).


1
Cx 3 y: vsplit son excelentes para múltiples vistas separadas en el código, pero me gustaría que fluyera de una columna a otra (como texto en un periódico)
user119857

1
¡Gracias! Me enamoré de la visualización del código de columnas de 4-6 que intenté formatear todo mi código en 30-40 caracteres, y me encanta el resultado extremadamente: al acortar todas las líneas, no solo las naturalmente cortas, mucho menos espacio se desperdicia y todo el espacio de mi pantalla se usa para mostrar texto; Además, los bloques de código se vuelven más bidimensionales, lo que facilita la comprensión visual y la supervisión estructural.
Erik Kaplun

Respuestas:


248

Ver modo de seguimiento . Extracto:

El modo de seguimiento es un modo menor que hace que dos ventanas, ambas mostrando el mismo búfer, se desplace como una única "ventana virtual" alta. Para usar el modo Seguir, vaya a un marco con solo una ventana, divídalo en dos ventanas una al lado de la otra usando Cx 3, y luego escriba Mx modo de seguimiento. A partir de ese momento, puede editar el búfer en cualquiera de las dos ventanas o desplazarse por cualquiera de ellas; la otra ventana lo sigue. En el modo Seguir, si mueve el punto fuera de la porción visible en una ventana y dentro de la porción visible en la otra ventana, eso selecciona la otra ventana, nuevamente, tratando a los dos como si fueran partes de una ventana grande.

3
¿Puedo usar esto con más de dos ventanas? ¿Puedo tener cuatro ventanas usando esto?
Yktula

Me pregunto si es posible editar dos columnas de la misma fuente de forma individual, no divididas en dos ventanas. Este no es el mejor ejemplo, pero imagine que tengo una columna para el código del script y la otra para comentarios, entonces si estoy en la segunda columna, quiero presionar "enter" y continuar en la siguiente línea, pero en la segunda columna. ¿Es esto posible con Emacs u otro editor de texto?
sw.

Es muy útil editar funciones o métodos largos y largos. Siempre encuentro este modo y abro dos búferes y lo hago solo, gracias huaiyuan
Yuan He

17

Utilizo esta función para invocar follow-mode, aunque necesitaría personalización para un tamaño de pantalla diferente:

;;; I want a key to open the current buffer all over the screen.
(defun all-over-the-screen ()
  (interactive)
  (delete-other-windows)
  (split-window-horizontally)
  (split-window-horizontally)
  (balance-windows)
  (follow-mode t))

¡Más 1 para señalar (ventanas de equilibrio) solo! Sin embargo, supongo que podría dividir un número paramétrico de veces y hacer que la función sea interactiva. Además, establecer scroll-marginen 0tendrá sentido follow-mode.
Erik Kaplun


2

Vim puede hacer esto usando :vsplit, y puede tener el mismo búfer abierto en múltiples "ventanas" (que en realidad son secciones dentro de una sola "ventana").

Documentación aquí


3
emacs también puede hacer eso, como se menciona en la pregunta, pero eso no es lo que se pide.
justinhj

1
Combina eso con :scrollbind, y estás ahí.
bastibe

@Kragen: el método para hacer esto es: 1. dividir la ventana verticalmente, de modo que se vea un único búfer en dos ventanas 2. desplazarse en la segunda ventana para que la primera línea en la segunda ventana venga después de la última línea en la primera ventana, 3. emitir comando :set scrollbinden cada una de las ventanas. Ahora las ventanas se desplazarán juntas como se desee. (Nota: scrollopt debe contener la opción 'ver'.)
Herbert Sitz el

Hmm, eso sí funciona. ¡Frio! ¡Gracias! Alguien debería escribir un script vim para hacer esto automáticamente.
Kragen Javier Sitaker

-1

Un vistazo rápido a la wiki de emacs no muestra un modo como el que usted describe. Sin embargo, no debería ser demasiado difícil escribir uno ... Solo necesita dividir la ventana con Cx 3 y mover el texto en la otra ventana hacia abajo, y cada vez que mueva el texto, haga lo mismo con la otra ventana. ..

Pueden surgir problemas cuando llegues al fondo del búfer, ¿quieres que el cursor vaya inmediatamente a la otra ventana en la parte superior?

Hmm, tal vez no sea tan fácil. Pero aún debería ser factible ...


1
... y así Elisp se agrega a la lista de cosas que necesito aprender :) Muchas gracias Brian;)
user119857

Evidentemente, alguien ya lo hizo, pero sí, ¡elisp es una herramienta increíble!
Brian Postow

-5

este es el comportamiento predeterminado de emacs al dividir la ventana (Cx 3 para división vertical) se obtienen dos columnas que tienen el buffer actual abierto


1
Pero en ese caso, no está en modo de seguimiento. El modo de seguimiento garantizará que cada búfer se coloque en la "página siguiente" para que pueda leer el búfer moviendo los ojos en lugar de mover el punto.
jrockway

-7

Utilice la división vertical con Cx 3. Esto dividirá el búfer actual en dos columnas que puede cambiar con Cx o.


2
Esto no fluye automáticamente de una columna a otra.
kmarsh
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.