如何在GNU Emacs中逐行滚动?

简而言之,我试图在vim和大多数其他编辑器中滚动emacs; 当我例如,从底部/顶部两行,并按下/向上( CTRLPN )只有一行上下,而不是一半的屏幕。

请参阅EmacsWIki上的一些build议:

 (setq scroll-step 1
      保守地滚动10000)

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

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

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

我晚了一点,但是如果你不介意安装一个软件包,那么平滑滚动 ( github ,也可以在MELPA中find )可能就是你正在寻找的东西 – 它对我来说肯定是有用的 。

一旦你安装了它,你可以在你的init.el中popup以下内容:

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

最后一行是可选的; 它开始在屏幕边缘附近而不是在屏幕边缘滚动,所以在这一点上你总是会得到一个小小的背景。 适应口味。

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

我就是这么做的 首先,你需要logging一个macros的一行滚动,上下。

开始macros

 Cx ( 

向下滚动一个

 Cu 1 Cv 

停止macros

 Cx ) 

为了向上滚动,使用

 Cu 1 Mv 

接下来你需要命名macros。

 Mx name-last-kbd-macro 

提示时提供一个名称,如:

 down-one-line 

然后,只需使用以下命令将键序列绑定到该命令名称即可:

 Mx global-set-key 

并在提示时,使用如下所示:

 M-(down arrow) 

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

这是我得到这些信息的地方。 您还可以在下面和其他地方find有关将macros添加到.emacs文件的说明。

这里为macros定义的解释

这里介绍如何控制滚动

自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的默认行为,并一次滚动一行,这取决于我在做什么。

直到至lessGNU 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实际上向下滚动一行,因为缓冲区被移动一行。

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

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

简单的做到这一点:

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

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

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

我在.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) 

Mx customize-variable scroll-conservatively

将其设置为1。

不过,你并不是真的想这样做。

要让“vim”滚动,把它放到你的.emacs文件中:

 (defun next-line-and-recenter () (interactive) (next-line) (recenter)) (defun previous-line-and-recenter () (interactive) (previous-line) (recenter)) (global-set-key (kbd "Cn") 'next-line-and-recenter) (global-set-key (kbd "Cp") 'previous-line-and-recenter) 

如果您正在寻找快速创build类似滚动效果的方法,请按顺序inputCnCl ,然后将光标向下移动,然后居中放置。

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

因为使用M-upM-down会很麻烦,因为它会干扰重载这些命令的组织模式。 为了避免这个问题,我亲自使用那些结合了M-page-up M-page-down的命令 。在这里,我将滚动向上和向下定义为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 [SM-prior] (lambda () (interactive) (let ((number-of-lines 1)) (scroll-down number-of-lines)))) (global-set-key [SM-next] (lambda () (interactive) (let ((number-of-lines 1)) (scroll-up number-of-lines))))