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

NVa*_*han 21 emacs scrolling text-cursor

有没有办法Emacs在我滚动时停止自动移动我的文本光标位置(又名,点)?我不断失去我的位置和标记这种烦人的行为。

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

(setq scroll-preserve-screen-position t
scroll-conservatively 0)
Run Code Online (Sandbox Code Playgroud)

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

小智 12

我想你想光标(点)及可视区域的行为应该像notepadgedit,其他现代编辑:能够独立改变点位置的可视区域,并立即动点后返回可视区域点的位置。但emacs有另一个概念:可见区域始终跟随点位置,反之亦然。

另见/sf/ask/673163641/

先前的答案显示了特殊的习惯用法:如果您想将可见区域(与点一起)移动到远离当前位置的位置,然后将点返回到之前的位置,您应该养成使用mark-ring. 总有一种方法可以mark ring到达当前工作位置:许多命令,例如isearch-forward, beginning-of-buffer,会ace-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) 连续保持可见区域中心的点。

  • 谢谢。有趣的答案。我的 Emacs 似乎有问题(在 Mac 和 Ubuntu 中):`Cu C-&lt;SPC&gt;` 似乎不起作用。不知道是不是`cua-mode`的问题还是什么。我尝试使用 `-q` 选项运行 Emacs,但没有任何改变。有任何想法吗? (2认同)
  • 这太糟糕了......我觉得这非常烦人,因为我使用了`highlight-symbol-mode`。我将光标设置在一个变量上,它突出显示了所有出现的情况。当我开始滚动时,光标离开变量并且所有亮点都丢失了。如果 Emacs 至少在滚动内容方面表现得像其他当代编辑器,那么它会好得多。 (2认同)

小智 8

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

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