让Emacs将光标移出屏幕

时间:2013-04-09 06:58:51

标签: emacs scroll elisp

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

我以前认为这是完全不可能的,因为这很难连接到Emacs的架构中,但后来我看到了multiple-cursors,这对于辅助游标来说就是这样(假设你阻止了滚动功能)从代理二级游标)。是否可以使用多个游标将主光标放在一些隐藏缓冲区中,有效光标是我实际编辑的内容?或许还有其他一些巧妙的伎俩?或者也许我的谷歌搜索让我失望了,这真的已经没有任何魔力了吗?

3 个答案:

答案 0 :(得分:6)

GNU ELPA上有一个名为scroll-restore的新软件包试图解决此问题。到目前为止,我遇到了一些错误,但这个软件包似乎在大多数情况下都是广告宣传的。

您可以通过

安装来测试它
M-x package-install RET scroll-restore RET

安装软件包后,您可以使用

启用次要模式
M-x scroll-restore-mode

就我个人而言,我将它绑定到 Scroll Lock 键,因为它似乎非常适合!这就是我要添加到我的init文件中的内容:

(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

答案 1 :(得分:2)

严格地说,你无法将光标移到屏幕外,因为底层的C代码不允许你这样做。

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

  • 你不喜欢“光标向前推”时的外观。你可以通过(暂时)使光标不可见来解决这个问题。
  • 您希望在发出非滚动命令后立即“跳回”到滚动前位置。可能有一些包为你做的,但你可以自己做一些pre-command-hook黑客攻击。
顺便说一下,我欢迎Emacs中的补丁提供一些功能。我讨厌其他编辑的“自动回跳”行为,但是记录“预滚动”位置然后提供一种跳回去的方法会很好。

答案 2 :(得分:2)

根据您的问题的上下文和描述来判断,您希望在保留编辑位置的同时浏览缓冲区。为此目的至少有两个技巧:标记/注册和在两个窗口中分割。

https://stackoverflow.com/a/3777598/308668描述了Emacs的寄存器,其作用类似于Vim的标记。您可以通过键入C-x r SPC aa是您选择的字母)来检查文件中的位置,然后您可以随时返回C-x r j a

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

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