19

是否可以让 Emacs 将光标移出屏幕,就像大多数 GUI 文本编辑器一样?当我在任何 GUI 编辑器上使用 Emacs 时,这是最困扰我的事情之一。当我向下滚动时,光标被缓冲区顶部“向前推”。

我以前认为这是完全不可能的,因为这是硬连线到 Emacs 的体系结构中的,但是后来我看到了multiple-cursors,它对辅助游标执行此操作(假设您阻止滚动功能对辅助游标起作用游标)。是否可以使用多个光标将主光标放在某个隐藏缓冲区中,而有效光标是我实际编辑的光标?或者也许是其他一些聪明的把戏?或者也许我的谷歌搜索让我失望了,这真的已经可能没有任何魔法?

4

3 回答 3

6

GNU ELPA上有一个可用的新软件包scroll-restore,它试图解决这个问题。到目前为止,我遇到了一些错误,但该软件包似乎大部分都像宣传的那样工作。

您可以通过安装它来测试它

M-x package-install RET scroll-restore RET

安装软件包后,您可以使用以下命令启用次要模式

M-x scroll-restore-mode

就个人而言,我将它绑定到Scroll Lock键上,因为它看起来非常合适!这就是我要添加到我的初始化文件中的内容:

(require 'scroll-restore)
(scroll-restore-mode 1)
;; Allow scroll-restore to modify the cursor face
(setq scroll-restore-handle-cursor t)
;; Make the cursor invisible while POINT is off-screen
(setq scroll-restore-cursor-type nil)
;; Jump back to the original cursor position after scrolling
(setq scroll-restore-jump-back t)
;; Toggle scroll-restore-mode with the Scroll Lock key
(global-set-key (kbd "<Scroll_Lock>") 'scroll-restore-mode)

这是此处发布的答案的直接副本:https ://emacs.stackexchange.com/a/2273/93

于 2014-10-17T00:34:34.810 回答
2

严格来说,您不能将光标移出屏幕,因为底层 C 代码不允许您这样做。

这就是说,我怀疑你的问题可以解决。基本上有2个方面:

  • 您不喜欢“向前推动光标”时的样子。您可以通过(暂时)使光标不可见来解决此问题。
  • 您想在发出非滚动命令后立即“跳回”到预滚动位置。可能有一些包可以为你做这件事,但你可以自己做一些pre-command-hook黑客攻击。

顺便说一句,我欢迎 Emacs 中提供某些功能的补丁。我讨厌其他编辑器的“自动跳回”行为,但记录“预滚动”位置然后提供一种跳回它的方法会很好。

于 2013-04-09T13:19:00.960 回答
2

从问题的上下文和描述来看,您似乎想在保留编辑位置的同时浏览缓冲区。为此目的至少有两个技巧:标记/寄存器和在两个窗口中拆分。

https://stackoverflow.com/a/3777598/308668描述了 Emacs 的寄存器,其作用类似于 Vim 的标记。C-x r SPC a您可以使用键控(a作为您选择的字母)在文件中检查您的位置,并且您可以随时返回C-x r j a.

某种自动化是通过外部脚本 ( goto-last-change.el) 实现的,如下所述:https ://superuser.com/a/184402/49046 。

或者,使用 将窗口一分为二C-x 2。新拆分的窗口都显示相同的位置,您可以使用另一个进行探索。C-x 0完成后关闭一个窗口。

于 2013-04-09T17:01:57.580 回答