Emacs - 在一个缓冲区内显示多列

170

我试图编辑一些汇编代码,这些代码通常以长而窄的清单格式排列。我想能够利用我拥有的大量横向空间,在屏幕上同时看到更多的代码。是否有一种方法可以让Emacs(或其他编辑器)向我显示多个指向同一缓冲区的列?

C-x 3 (在emacs中) 和 :vsplit (在vim中) 可以让您查看代码的多个分离视图,但我希望它可以从一列流动到另一列(就像报纸中的文本一样)。


1
C-x 3和:vsplit非常适合在代码中创建多个独立视图,但我希望它能够从一列流动到另一列(就像报纸中的文本)。 - user119857
1
谢谢!我爱上了4-6列代码查看,尝试将所有代码格式化为30-40个字符,并且非常喜欢结果——通过使所有行短而不仅仅是自然短的行,减少了很多空间浪费,所有屏幕空间都用于显示文本;此外,代码块变得更加二维化,有助于视觉理解和结构监督。 - Erik Kaplun
7个回答

256

请参考follow-mode。 摘录:

跟随模式是一种次要模式,它使两个窗口都显示相同的缓冲区,并且作为一个高大的“虚拟窗口”一起滚动。使用跟随模式,转到只有一个窗口的框架,使用C-x 3将其分成两个并排的窗口,然后键入M-x follow-mode。从那时起,您可以在两个窗口中的任何一个中编辑缓冲区或滚动其中一个,另一个窗口将跟随它。
在跟随模式下,如果将插入点移动到一个窗口可见部分之外并进入另一个窗口可见部分,则选择另一个窗口 - 再次像它们是一个大窗口的一部分一样。

3
我可以用这个工具打开超过两个窗口吗?我可以使用这个工具打开四个窗口吗? - Yktula
我想知道是否有可能以单独的方式编辑同一源的两列,而不是在两个窗口中分割。这不是最好的例子,但想象一下我有一个用于脚本代码的列和另一个用于注释的列,如果我在第二列中,我想要按“Enter”键并继续在第二列的下一行进行。 Emacs或其他文本编辑器是否支持此功能? - sw.
1
编辑长长的函数或方法非常有用。我经常找到这种模式,打开两个缓冲区并自己完成编辑。感谢怀远。 - Yuan He

18

我使用这个函数来调用follow-mode,虽然需要根据不同的屏幕尺寸进行定制:

;;; 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))

仅指出(平衡窗口)加1!我猜你可以使它分割参数次数并使函数交互式。此外,在follow-mode中将scroll-margin设置为0是有意义的。 - Erik Kaplun

17

1
但是问题是关于Emacs而不是Vim。 - Alexander I.Grafov

2
Vim通过使用:vsplit来实现此目标 - 您可以在多个“窗口”中打开相同的缓冲区(实际上是单个“窗口”中的不同部分)。详见此处文档

3
Emacs也可以做到这一点,就像问题中提到的那样,但这不是被问到的内容。 - justinhj
1
结合使用 :scrollbind,你就可以实现这个功能了。 - bastibe
@Kragen -- 实现此操作的方法是:1. 垂直分割窗口,使单个缓冲区在两个窗口中可见;2. 在第二个窗口中滚动,使第二个窗口的第一行出现在第一个窗口的最后一行之后;3. 在每个窗口中输入命令“:set scrollbind”。现在,窗口将按预期一起滚动。(注意:scrollopt 必须包含 'ver' 选项。) - Herbert Sitz
嗯,那差不多可以。太棒了!谢谢!应该有人写个 vim 脚本自动完成这个。 - Kragen Javier Sitaker
:scrollbind和:cursorbind不能完成follow-mode的工作!如果你看过Emacs的follow-mode,那么你就能理解他所说的功能。follow-mode更加智能,你可以在一个窗口中查看缓冲区的第一部分,并在另一个窗口中查看该文件的其余部分。 - SdSaati

-1

快速查看emacs维基并没有显示出您所描述的模式。然而,编写一个类似的模式应该不会太难...您只需要使用C-x 3拆分窗口并将另一个窗口中的文本向下移动,并且每当您移动文本时,也要对另一个窗口执行相同的操作...

当您到达缓冲区底部时可能会出现问题,您是否希望光标立即转到另一个窗口的顶部?

嗯,也许这并不容易。但它仍然是可行的...


1
...所以Elisp被添加到我需要学习的清单中 :) 非常感谢Brian ;) - user119857
显然,有人已经做到了,但是没错,elisp是一个很棒的工具! - Brian Postow

-5

这是 Emacs 在分割窗口时的默认行为(使用 C-x 3 进行垂直分割),你会得到两列,两列都打开了当前缓冲区。


1
但在这种情况下,它不是在跟随模式下。跟随模式将确保每个缓冲区都定位在“下一页”,因此您可以通过移动眼睛而不是移动点来阅读缓冲区。 - jrockway

-7

使用 C-x 3 进行垂直分屏。这将把当前缓冲区分成两列,可以使用 C-x o 在两列之间切换。


2
这不会自动从一列流动到另一列。 - kmarsh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接