ChatGPT解决这个技术问题 Extra ChatGPT

Emacs - 多列一个缓冲区

我正在尝试编辑一些汇编代码,这些代码往往被格式化为长而细的列表。我希望能够使用我拥有的几英亩水平空间,并一次在屏幕上看到更多代码。有没有一种方法可以让 Emacs(或者实际上是另一个编辑器)向我显示多个列都指向同一个缓冲区?

Cx 3 (emacs) 和 :vsplit (vim) 非常适合代码的多个单独视图,但我希望它从一列流到另一列(就像报纸中的文本)。

Cx 3 和 :vsplit 对于代码中的多个单独视图非常有用,但我希望它从一列流到另一列(就像报纸上的文字一样)
谢谢!我爱上了 4-6 列代码查看,我尝试将所有代码格式化为 30-40 个字符,我非常喜欢结果——通过使所有行都变短,而不仅仅是自然短的行,更少的空间被浪费了,我所有的屏幕空间都用于显示文本;此外,代码块变得更加二维,便于视觉理解和结构监督。

h
huaiyuan

请参阅follow-mode。摘抄:

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


我可以在两个以上的窗口中使用它吗?我可以使用这个有四个窗口吗?
我想知道是否可以以单独的方式编辑同一源的两列,而不是在两个窗口中拆分。这不是最好的例子,但假设我有一列用于脚本代码,另一列用于注释,那么如果我在第二列中,我想按“enter”并在下一行但在第二列中继续。这可以用 Emacs 或其他文本编辑器实现吗?
编辑 long long 函数或方法非常有用。我总是找到这种模式并打开两个缓冲区并自己执行此操作,谢谢怀远
K
Kragen Javier Sitaker

我使用此函数来调用 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 用于单独指出(平衡窗口)!我想虽然你可以让它分割参数次数并使函数具有交互性。此外,将 scroll-margin 设置为 0follow-mode 中是有意义的。
b
bheeshmar

Vim 的“Multipager”插件可以通过 VIM 拆分来为想要在 Vim 中获得这种行为的人做到这一点。

从 Dr. Chip 的页面获取:http://mysite.verizon.net/astronaut/vim/index.html#MPAGE

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


但是有一个问题是关于 Emacs 而不是 Vim。
b
brettkelly

Vim 可以使用 :vsplit 做到这一点 - 你可以在多个“窗口”(实际上是单个“窗口”中的部分)中打开相同的缓冲区。

Documentation here


如问题中所述,emacs 也可以做到这一点,但这不是所要求的。
将它与 :scrollbind 结合起来,您就在那里。
@Kragen - 执行此操作的方法是:1.垂直拆分窗口,因此单个缓冲区在两个窗口中可见 2.在第二个窗口中滚动,以便第二个窗口中的第一行位于第一个窗口中的最后一行之后,3。在每个窗口中发出命令 :set scrollbind。现在窗口将根据需要一起滚动。 (注意:scrollopt 必须包含 'ver' 选项。)
嗯,这确实有点工作。凉爽的!谢谢!有人应该编写一个 vim 脚本来自动执行此操作。
:scrollbind 和 :cursorbind 不做跟随模式的工作!如果您看到 emacs follow-mode,那么您就可以意识到他所说的功能是什么。 follow-mode 更智能一些,您在一个窗口中观看缓冲区的第一部分,并在另一个窗口中查看该文件的其余部分。
B
Brian Postow

快速浏览一下 emacs wiki 并没有像您描述的那样显示模式。但是,写一个应该不会太难...您只需要使用 Cx 3 拆分窗口并将另一个窗口中的文本向下移动,并且每当您移动文本时,对另一个窗口执行相同的操作。 ..

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

嗯,也许没那么容易。不过应该还是可以的...


...因此 Elisp 被添加到我需要学习的东西列表中:) 非常感谢 Brian ;)
显然,有人已经这样做了,但是是的,elisp 是一个了不起的工具!
s
second

这是分割窗口时 emacs 的默认行为(Cx 3 用于垂直分割)你会得到两列,它们都打开了当前缓冲区


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

使用 Cx 3 的垂直分割。这会将当前缓冲区分成两列,您可以使用 Cx o 在它们之间切换。


这不会自动从一列流向另一列。