如何在GNU Emacs中逐行滚动?

时间:2009-07-15 01:23:48

标签: emacs

简单地说,我正试图像在vim和大多数其他编辑器中一样滚动emacs;例如,当我是从底部/顶部开始的两行时,我按下/向上( Ctrl - p n ,< kbd>↑,)它只向上或向下一行,而不是屏幕的一半。

15 个答案:

答案 0 :(得分:47)

如果要准确定位屏幕,可以使用Ctrl-L。

  • 默认情况下,它会将当前行定位在屏幕中间。

  • ESC 0 Ctrl-L将当前行定位在顶部。

答案 1 :(得分:46)

查看有关EmacsWIki的一些建议:

(setq scroll-step            1
      scroll-conservatively  10000)

答案 2 :(得分:37)

我参加派对有点晚了,但是如果你不介意安装一个软件包,那么平滑滚动github,也可以在MELPA中找到)可能是你正在寻找的 - 它肯定适合我。

安装完成后,您可以在init.el中弹出以下内容:

(require 'smooth-scrolling)
(smooth-scrolling-mode 1)
(setq smooth-scroll-margin 5)

最后一行是可选的;它开始滚动靠近屏幕边缘而不是它,所以你总是得到一点关于这一点的背景。调整味道。

答案 3 :(得分:25)

我的解决方案不是改变Emac的默认滚动,而是从宏创建一个键序列命令。这样,您可以方便地一次滚动一行。不理想,但超级简单。只是碰巧M-(↓)和M-(↑)可用,所以这就是我使用的。

这就是我做的。首先,您需要为一条线滚动,上下滚动记录一个宏。

开始宏

C-x ( 

向下滚动一个

C-u 1 C-v

停止宏

C-x )

要向上滚动,请使用

C-u 1 M-v

接下来,您需要命名宏。

M-x name-last-kbd-macro

在提示时给它命名,如:

down-one-line

然后使用以下命令将键序列绑定到该命令名:

M-x global-set-key

在提示时,请使用以下内容:

M-(down arrow)

然后它会询问你要绑定哪个命令,你应该给它你之前发明的名字,例如,下线。

这是我获取此信息的地方。您还可以在下面和其他地方找到有关将宏添加到.emacs文件的说明。

Here用于宏定义解释

Here了解如何控制滚动

答案 4 :(得分:21)

自2000年以来,我一直在.emacs文件中使用这些文件。

(global-set-key (quote [M-down]) (quote View-scroll-line-forward))
(global-set-key (quote [M-up]) (quote View-scroll-line-backward)) 

这样,我可以保持Emacs默认行为,也可以一次滚动一行,具体取决于我正在做什么。

这至少工作到GNU Emacs 22.我最近升级到Emacs 24并发现View-scroll-line-forwardView-scroll-line-backward不再可用。经过一番狩猎,我发现了向上滚动和向下滚动的工作。因此,如果您使用的是Emacs 24,则可以使用它。

(global-set-key (quote [M-down]) (quote scroll-up-line))
(global-set-key (quote [M-up]) (quote scroll-down-line)) 

我大多跳过Emacs 23,所以如果你使用的是版本,你可以尝试上述两种版本。

注意:scroll-up-line实际上滚动了一行 down ,因为缓冲区正在向上移动一行。

答案 5 :(得分:13)

我重新绑定箭头键以执行滚动操作。

(global-set-key [up] (lambda () (interactive) (scroll-down 1)))
(global-set-key [down] (lambda () (interactive) (scroll-up 1)))

(global-set-key [left] (lambda () (interactive) (scroll-right tab-width t)))
(global-set-key [right] (lambda () (interactive) (scroll-left tab-width t)))

答案 6 :(得分:11)

简单做到这一点:

(global-set-key [M-up] (lambda () (interactive) (scroll-up 1)))
(global-set-key [M-down] (lambda () (interactive) (scroll-down 1)))

然后元光标向上移动,元光标向下移动。

QED。不确定以上所有人都吸烟了!

答案 7 :(得分:4)

我在.emacs文件中有以下内容,以启用一个很好的ctrl-up,ctrl-down滚动行为。我也将它用于鼠标滚轮。

(defun scroll-down-in-place (n)
  (interactive "p")
  (previous-line n)
  (scroll-down n))

(defun scroll-up-in-place (n)
  (interactive "p")
  (next-line n)
  (scroll-up n))

(global-set-key [mouse-4] 'scroll-down-in-place)
(global-set-key [mouse-5] 'scroll-up-in-place)
(global-set-key [C-up] 'scroll-down-in-place)
(global-set-key [C-down] 'scroll-up-in-place)

答案 8 :(得分:2)

M-x customize-variable scroll-conservatively

将其设为1.

但你真的不想这样做。

答案 9 :(得分:2)

要让“vim”滚动,请将其添加到.emacs文件中:

(defun next-line-and-recenter () (interactive) (next-line) (recenter))
(defun previous-line-and-recenter () (interactive) (previous-line) (recenter))
(global-set-key (kbd "C-n") 'next-line-and-recenter)
(global-set-key (kbd "C-p") 'previous-line-and-recenter)

答案 10 :(得分:2)

如果您正在寻找一种快速创建滚动效果的方法,请依次输入C-nC-l,这会将光标向下移动,然后将其居中。

答案 11 :(得分:2)

因为使用 M-up M-down 会很烦人,因为它会干扰重载这些命令的org-mode。为了避免这个问题,我个人使用那些组合 M-page-up M-page-down 的命令。这里我将向上和向下滚动定义为1行。 / p>

;;;scroll by `number-of-lines' without the cursor attached to the screen
(global-set-key [M-prior] (lambda () (interactive) (let ((number-of-lines 1))
                                                  (scroll-down number-of-lines)
                                                  (forward-line (- number-of-lines)))))
(global-set-key [M-next] (lambda () (interactive) (let ((number-of-lines 1))
                                                  (scroll-up number-of-lines)
                                                  (forward-line number-of-lines))))

;;;scroll by `number-of-lines' with the cursor attached to the screen
(global-set-key [S-M-prior] (lambda () (interactive) (let ((number-of-lines 1))
                                                  (scroll-down number-of-lines))))
(global-set-key [S-M-next] (lambda () (interactive) (let ((number-of-lines 1))
                                                  (scroll-up number-of-lines))))

答案 12 :(得分:0)

如果你在.xsession中启动emacs,在我的情况下设置滚动 - 保守地到100+将不起作用,也不会滚动步骤1.但是如果你在X之后启动emacs,它可以工作。

答案 13 :(得分:0)

如果您不介意使用鼠标并拥有滚轮,则可以通过以下任一方式自定义变量mouse-wheel-scroll-amount:

C-h v鼠标滚轮滚动量(单击自定义,将值更改为“特定行数” 1,ApplyAndSave。)

或在.emacs中添加以下行: '(鼠标滚轮滚动量'(1((shift)。1)((meta))((control).text-scale)))

以下列出了很多可能性 https://www.emacswiki.org/emacs/Scrolling

答案 14 :(得分:0)

在使用可用配置(emacs 26.3)之后,我得到了以下一组值:

(setq scroll-step 1
      scroll-preserve-screen-position t
      scroll-margin 10
      scroll-conservatively 10
      maximum-scroll-margin 0.0
      scroll-up-aggressively 0.0
      scroll-down-aggressively 0.0)

我相信 scroll-marginscroll-conservatively 的值并不重要,因为 maximum-scroll-margin 会将它们压制。它们只需要相等(也许?)。

滚动逐行进行,即使在文件末尾(对我来说最坏的情况)。唯一缺少的功能是,顶部和底部的边距丢失了。

这是一种妥协,对我来说,平滑滚动是值得的。