Emacs - Múltiples columnas un búfer


Estoy tratando de editar algún código ensamblador que tiende a ser formateado 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 a la vez. ¿Hay un método para que Emacs (o de hecho otro editor) me muestre varias columnas todas apuntando al mismo búfer?

C - x 3 (emacs) y: vsplit (vim) 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).

 158
Author: user119857, 2009-06-09

7 answers

Véase modo de seguimiento. Extracto:

El modo de seguimiento es un modo menor que hace que dos ventanas, ambas mostrando el mismo búfer, se desplacen como una sola ventana virtual "alta"."Para usar el modo de seguimiento, vaya a un marco con una sola ventana, divídalo en dos ventanas lado a lado usando C-x 3, y luego escriba M-x follow-mode. A partir de entonces, puede editar el búfer en cualquiera de las dos ventanas, o desplazarse por una; la otra ventana lo sigue. En el modo de seguimiento, si mueve el punto fuera de la parte visible en una ventana y en la parte visible en la otra ventana, que selecciona la otra ventana-de nuevo, el tratamiento de los dos como si fueran partes de una ventana grande.
 241
Author: huaiyuan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-09 15:07:09

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))
 16
Author: Kragen Javier Sitaker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-24 18:33:46

El plugin "Multipager" para Vim puede hacer esto con VIM splits para las personas que desean obtener este comportamiento en Vim.

Obtenlo de la página del Dr. Chip: http://mysite.verizon.net/astronaut/vim/index.html#MPAGE

Docs: http://mysite.verizon.net/astronaut/vim/doc/mpage.txt.html

 15
Author: bheeshmar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-23 22:22:29

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

Documentación aquí

 2
Author: inkedmn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-09 14:16:23

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 escribir uno... Solo necesita dividir la ventana con C-x 3 y mover el texto en la otra ventana hacia abajo, y cada vez que mueva el texto, haga lo mismo en la otra ventana...

Los problemas pueden ocurrir cuando llegas a la parte inferior del búfer, ¿quieres que el cursor vaya inmediatamente a la otra ventana en la parte superior?

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

 -1
Author: Brian Postow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-09 14:59:56

Este es el comportamiento predeterminado de emacs al dividir la ventana (C-x 3 para dividir vertical) obtienes dos columnas que tienen el búfer actual abierto

 -5
Author: second,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-09 14:12:54

Use vertical-split con C-x 3. Esto dividirá el búfer actual en dos columnas que puede cambiar con C-x o.

 -7
Author: Nathaniel Flath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-09 14:17:32