在 Emacs 中滚动时不要改变光标位置

在 Emacs 中滚动时不要改变光标位置

有没有办法阻止Emacs我在滚动时自动移动文本光标位置(即点)?这种烦人的行为总是让我丢失位置和标记。

我测试了以下建议,但没有成功:

(setq scroll-preserve-screen-position t
scroll-conservatively 0)

Emacs(我在 Ubuntu 和 OS X 上运行24.2。)

答案1

我认为您希望光标(点)和可见区域的行为应该像notepadgedit和其他现代编辑器中那样:能够独立于点位置更改可见区域,并在移动点后立即将可见区域返回到点位置。但emacs还有另一个概念:可见区域始终跟随点位置,反之亦然。

也可以看看https://stackoverflow.com/questions/9616623/ctrl-up-down-style-scrolling-in-emacs

上一个答案显示了特殊的习惯用法:如果你想将可见区域(与点一起)从当前位置移开,然后将点精确地返回到先前的位置,你应该习惯使用mark-ring。总有一种方法可以到达mark ring当前工作位置:许多命令,如isearch-forwardbeginning-of-bufferace-jump-mode会自动将先前的位置保存在 中mark ring,你不应该使用C-<SPC> C-<SPC>,而只能C-u C-<SPC>用于跳回。滚动命令,如scroll-upmwheel-scroll,默认情况下不会自动保存先前的位置,因为它可能会产生太多多余的标记。

您可以在几个地方使用命令clone-indirect-bufferview-buffer-other-window独立处理缓冲区。并使用命令recenter-top-bottom( C-l) 持续将点保持在可见区域的中心。

答案2

我不知道是否有办法阻止 emacs 在滚动时移动你的点。但如果你想保存你的位置以便稍后返回,你可以使用标记环

也就是说,键入C-<SPC> C-<SPC>将当前点位置推送到标记环上,然后键入C-u C-<SPC>将点设置到标记环中的先前位置。

答案3

我用的是这个:

;;; scrollers - M-f, M-b
(global-set-key "\M-f" "\C-u1\C-v")
(global-set-key "\M-b" "\C-u1\M-v")

答案4

以下对我有用:

(custom-set-variables
 '(scroll-conservatively 1000)
 '(scroll-margin 3)
 )

相关内容