我喜欢 8 左右的滚动边距。这意味着当光标到达顶部或底部的 8 行范围内时,缓冲区将开始滚动。然而,这一方案不适用于 eshell 和 ansi term 缓冲区、isql 缓冲区或任何可能与 emacs 一起使用的 REPL 缓冲区。在这些缓冲区中的任何一个中,当有人执行任何操作时,它会立即向上滚动缓冲区,以便缓冲区底部和输入行之间有 8 行,这使得使用任何类似终端的操作往好里说是很尴尬,往坏了说是无法使用。 emacs 中的缓冲区,视情况而定。
似乎没有缓冲区能够识别滚动边距变量,除非它是全局的。因此,虽然我可以在不同模式下使用 Hook 将变量设置为不同值,但它会影响我所有打开的缓冲区。
假设我正在编辑一些代码。我决定在 shell 中做一些事情。我的 shell-mode-hooks 将滚动边距设置为 0(以便它们可用)。然后,所有缓冲区的滚动边距设置为 0,这使得在我的编码缓冲区中滚动变得很尴尬。但是,如果我打开一个新的编码缓冲区,它会将我的滚动边距设置回 8。然后我的 shell 缓冲区就会变得笨拙或无法使用,因为每当它们获得焦点或显示命令的输出时,它会立即向上滚动 8 个空格。
除了将所有缓冲区的滚动边距保持为 0 之外,还有其他解决方案吗?
最佳答案
将评论转换为答案。使用buffer local variable卡在钩子(Hook)上。
关于Emacs、平滑滚动、滚动边距和 eshell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12667043/