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


18

有没有一种方法可以阻止Emacs我在滚动时自动移动文本光标位置(又名,点)?这种烦人的行为使我不断迷失自己的位置和痕迹。

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

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

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

Answers:


11

我认为您希望cursor(point)和可见区域的行为应类似于notepadgedit和其他现代编辑器:能够独立于点位置更改可见区域,并在移动点后立即将可见区域返回到点位置。但是emacs还有另一个概念:可见区域始终遵循点的位置,反之亦然。

另请参阅/programming/9616623/ctrl-up-down-style-scrolling-in-emacs

Previous answer shows special idiom: if you want to move the visible area (with the point together) far from current position and then to return the point in exactly the previous position you should have a habit to use mark-ring. There always is a way through mark ring to current working position: many commands, like isearch-forward, beginning-of-buffer, ace-jump-mode automatically save previous position in mark ring and you shouldn't use C-<SPC> C-<SPC> before, but only C-u C-<SPC> for jumping back. Scrolling commands, like scroll-up or mwheel-scroll, don't automatically save previous position by default because it may produce too many excessive marks.

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


2
谢谢。有趣的答案。但是,我的Emacs似乎有问题(在Mac和Ubuntu中):C-u C-<SPC>似乎没有用。我不知道这是什么问题cua-mode。我尝试使用-q选项运行Emacs ,但没有任何改变。有任何想法吗?
NVaughan

太糟糕了...我觉得这很烦人,因为我使用highlight-symbol-mode。我将光标放在一个变量上,它突出显示了所有发生的事件。当我开始滚动时,光标离开变量,所有高光都丢失了。如果Emacs在滚动方面至少表现得像其他当代编辑器那样好,那它将更好。
itmuckel

7

我不知道滚动时是否有一种方法可以阻止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")

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.