如何滚动一行一行在GNU Emacs的?

问题描述 投票:79回答:13

简单地说,我试图让emacs的滚动像vim和其他大多数编辑器;当我例如,从底部/顶部两行,我按下向下/向上(CTRL-P,N,↑,↓)它会只有一条线向上或向下,而不是半个屏幕。

emacs
13个回答
47
投票

看到一些对EmacsWIki的建议:

(setq scroll-step            1
      scroll-conservatively  10000)

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)

2
投票

因为它可以是恼人使用M-起来,M-下来,因为它与组织模式,其超载这些命令干扰。为了避免这个问题,我个人使用那些结合M-向上翻页M-页面下的命令。”在这里,我所定义的上下滚动1行。

;;;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))))

1
投票

如果你正在寻找一个快速的方法来创建一个滚动般的效果,在C-nC-l顺序光标向下移动进入,然后它中心。


0
投票

如果您在.xsession的启动Emacs,在我的情况设置滚动保守到100+将无法正常工作,也没有滚动步骤1中,但如果u X之后启动Emacs,它的工作原理。


47
投票

如果你想在屏幕上准确定位,您可以使用Ctrl-L。

  • 默认情况下,它定位在屏幕中间的当前行。
  • ESC 0 CTRL-L定位在顶部的当前行。

37
投票

我有点迟到了,但如果你不介意安装包,那么平滑滚动(github,在MELPA也可)可能是你在找什么 - 它肯定为我工作。

一旦你已经安装了它,你可以在弹出的init.el如下:

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

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


26
投票

我的解决方案是不改变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如何控制滚动


22
投票

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

(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实际上滚动一行下来,因为缓冲区移动一行。


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)))

11
投票

Simples做到这一点:

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

那么元光标向上移动和meta光标向下移动了。

QED。不知道以上所有的人都吸烟!


5
投票

我在我的.emacs以下文件,以使一个很好CTRL向上,按住Ctrl键上下滚动行为。我也用这个鼠标滚轮。

(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)

2
投票

M-x customize-variable scroll-conservatively

将其设置为1。

你不是真的想这样做,虽然。

© www.soinside.com 2019 - 2024. All rights reserved.