2009-06-09 31 views
153

Estoy intentando editar algunos códigos de ensamblaje que suelen formatearse en listados largos pero delgados. Me gustaría poder utilizar algunos de los acres de espacio horizontal que tengo y ver más código en la pantalla al mismo tiempo. ¿Hay algún método para hacer que Emacs (o incluso otro editor) me muestre varias columnas apuntando al mismo buffer?Emacs - Varias columnas un búfer

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

+1

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

+0

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

Respuesta

235

Ver follow-mode. Extracto:

modo de Seguimiento es un modo menor que hace dos ventanas, ambos mostrando el mismo tampón, desplazarse como una sola altura para utilizar el modo de seguimiento, ir a un marco con una sola ventana, split “ventana virtual”. en dos ventanas una al lado de la otra utilizando Cx 3, y luego escriba Mx follow-mode. A partir de ese momento, puede editar el búfer en cualquiera de las dos ventanas, o desplazarse a cualquiera de ellas; la otra ventana lo sigue. En el modo Seguir, si mueve el punto fuera de la parte visible en una ventana y en la parte visible en la otra ventana, eso selecciona la otra ventana, tratando los dos como si fueran partes de una ventana grande.
+13

Oh. Mi. Palabra. Justo lo que estaba buscando. Muchas gracias huaiyuan. – user119857

+9

¡Agradable, aprende algo nuevo todos los días! –

+3

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

-5

Este es el comportamiento por defecto de emacs cuando se divide la ventana (Cx 3 de división vertical) que se produzcan dos columnas que ambos tienen el búfer en abierto

+1

Pero en ese caso, no está en modo de seguimiento. El modo de seguimiento asegurará que cada búfer se colocará en la "página siguiente" para que pueda leer a través del búfer moviendo los ojos en lugar de mover el punto. – jrockway

2

Vim puede hacer esto utilizando :vsplit - y usted puede tener la mismo buffer abierto en múltiples "ventanas" (que en realidad son secciones dentro de una sola "ventana").

Documentation here

+2

emacs también puede hacerlo, como se menciona en la pregunta, pero eso no es lo que se está preguntando. – justinhj

+1

La pregunta fue editada después de que respondí. – inkedmn

+1

Combine eso con ': scrollbind', y usted está allí. – bastibe

-7

Uso vertical dividida con C-x 3. Esto dividirá el búfer en dos columnas que puede cambiar entre la C-x o.

+2

Esto no fluye automáticamente de una columna a otra. – kmarsh

-1

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

Se pueden producir problemas al llegar al fondo del búfer, ¿desea que el cursor vaya inmediatamente a la otra ventana en la parte superior?

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

+1

... y entonces Elisp se agrega a las cosas-I-necesito-para-aprender-lista :) Muchas gracias Brian;) – user119857

+0

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

16

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)) 
+0

¡Más 1 para señalar (balanzas) solo! Aunque creo que podrías dividir un número paramétrico de veces y hacer que la función sea interactiva. Además, establecer 'scroll-margin' en' 0' tendrá sentido en 'follow-mode'. –